Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Popup calendar not working in Mozilla???

Status
Not open for further replies.

LanyA

Programmer
Jan 29, 2003
23
0
0
US
I have source code for a popup calendar that works fine in IE6 but not in Mozilla and I am at a loss as to why this is:

I get the error

crossobj has no properties (Line 304) in the Javascript console; this line translates to

crossobj.visibility = 'hidden';

Now, upon tracing it back it seems like this is all the applicable code:

var ie = document.all;
var dom = document.getElementById;
........
........
document.write ('<div onclick="bShow=true" id="calendar" style="z-index:+999;...') etc etc (the calendar id gets rendered here)
.....
function init(){
crossobj=(dom)?document.getElementById('calendar').style: ie? document.all.calendar : window.document.getElementById('calendar');
.....
}
.....
window.onload=init
......

Does anyone know why this would work in IE but not in Mozilla? I know that Mozilla handles window events differently, but how would that apply here? Any help would be greatly appreciated.
 

I can't see anything immediately obvious with the code you've given, so it is possible that some other code is to blame.

Can you post a URL?

Dan


[tt]D'ya think I got where I am today because I dress like Peter Pan here?[/tt]
[banghead]

 
Unfortunately I am unable to post a url :(, is there a way for me to attach the script somehow?
 

Copy/paste works for me. If the script is too long, it will be truncated, however.

If you are posting the script, remember to put code tags around it (see the "Process TGML" link below the post box). You will also need to post all linked JS and CSS files. As you can see - much easier to post a URL ;o)

Dan


[tt]D'ya think I got where I am today because I dress like Peter Pan here?[/tt]
[banghead]

 
It's actually open source code that I got from somewhere else, are there any rules about posting such code here? (Thanks for your help)
 
Code:
	var language = 'en'; // Default Language: en - english; es - spanish; de - german
	var enablePast = 0;  // 0 - disabled; 1 - enabled
	var enableFuture = 0; // 0 - disabled; 1 - enabled
	var enableRange = 0; // 0 - disabled; 1 - enabled
	var fixedX = -1;  // x position (-1 if to appear below control)
	var fixedY = -1;  // y position (-1 if to appear below control)
	var startAt = 1;  // 0 - sunday; 1 - monday
	var showWeekNumber = 0; // 0 - don't show; 1 - show
	var showToday = 1;  // 0 - don't show; 1 - show
	var imgDir = 'images/';  // directory for images ... e.g. var imgDir="/img/"
	var dayName = '';
	var checkDate = 0; // 0 - disabled; 1 - check chosen date if past, set to end of day, if today, set to intra-day
	var HideIEObjects = false; //Hides IE objects.
	var OverlayIEObjects = true; //It will display the calendar above any IE objects
	
	
	var gotoString = {
		en : 'Go To Current Month',
		es : 'Ir al Mes Actual',
		de : 'Gehe zu aktuellem Monat',
		no : 'G'+String.fromCharCode(229)+' til denne m'+String.fromCharCode(229)+'neden'
	};
	var todayString = {
		en : 'Today is',
		es : 'Hoy es',
		de : 'Heute ist',
		no : 'Idag er'
	};
	var weekString = {
		en : 'Wk',
		es : 'Sem',
		de : 'KW',
		no : 'Uke'
	};
	var scrollLeftMessage = {
		en : 'Click to scroll to previous month. Hold mouse button to scroll automatically.',
		es : 'Presione para pasar al mes anterior. Deje presionado para pasar varios meses.',
		de : 'Klicken um zum vorigen Monat zu gelangen. Gedr'+String.fromCharCode(252)+'ckt halten, um automatisch weiter zu scrollen.',
		no : 'Klikk for forrige m'+String.fromCharCode(229)+'ned. Hold nede museknappen for '+String.fromCharCode(229)+' g'+String.fromCharCode(229)+' hurtig bakover.'
	};
	var scrollRightMessage = {
		en : 'Click to scroll to next month. Hold mouse button to scroll automatically.',
		es : 'Presione para pasar al siguiente mes. Deje presionado para pasar varios meses.',
		de : 'Klicken um zum n'+String.fromCharCode(228)+'chsten Monat zu gelangen. Gedr'+String.fromCharCode(252)+'ckt halten, um automatisch weiter zu scrollen.',
		no : 'Klikk for neste m'+String.fromCharCode(229)+'ned. Hold nede museknappen for '+String.fromCharCode(229)+' g'+String.fromCharCode(229)+' hurtig framover.'
	};
	var selectMonthMessage = {
		en : 'Click to select a month.',
		es : 'Presione para seleccionar un mes.',
		de : 'Klicken um Monat auszuw'+String.fromCharCode(228)+'hlen.',
		no : 'Klikk for '+String.fromCharCode(229)+' velge m'+String.fromCharCode(229)+'ned.'
	};
	var selectYearMessage = {
		en : 'Click to select a year.',
		es : 'Presione para seleccionar un a'+String.fromCharCode(241)+'o.',
		de : 'Klicken um Jahr auszuw'+String.fromCharCode(228)+'hlen.',
		no : 'Klikk for '+String.fromCharCode(229)+' velge '+String.fromCharCode(229)+'r.'
	};
	var selectDateMessage = {  // do not replace [date], it will be replaced by date.
		en : 'Select [date] as date.',
		es : 'Seleccione [date] como fecha.',
		de : 'W'+String.fromCharCode(228)+'hle [date] als Datum.',
		no : 'Velg [date] som dato.'
	};
	var selectCloseMessage = {
		en : 'Close calendar',
	 	es : 'Cerra la fenestre',
		de : 'Kalender schlie'+String.fromCharCode(223)+'en',
		no : 'Lukk kalender'
	};
	var monthName = {
		en : new Array('January','February','March','April','May','June','July','August','September','October','November','December'),
		es : new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'),
		de : new Array('Januar','Februar','M'+String.fromCharCode(228)+'rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'),
		no : new Array('Januar','Februar','Mars','April','Mai','Juni','Juli','August','September','Oktober','November','Desember')
	};
	var monthName2 = {
		en : new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'),
		es : new Array('ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC'),
		de : new Array('JAN','FEB','MRZ','APR','MAI','JUN','JUL','AUG','SEP','OKT','NOV','DEZ'),
		no : new Array('JAN','FEB','MAR','APR','MAI','JUN','JUL','AUG','SEP','OKT','NOV','DES')
	};
	var crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected, dateSelected, omonthSelected, oyearSelected, odateSelected, monthConstructed, yearConstructed, intervalID1, intervalID2, timeoutID1, timeoutID2, ctlToPlaceValue, ctlNow, dateFormat, nStartingYear, selDayAction, isPast, isfuture;
	if (startAt==0) {
		dayName = {
			en : new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'),
			es : new Array('Dom','Lun','Mar','Mie','Jue','Vie','Sab'),
			de : new Array('So','Mo','Di','Mi','Do','Fr','Sa'),
			no : new Array('S'+String.fromCharCode(248)+'n','Man','Tir','Ons','Tor','Fre','L'+String.fromCharCode(248)+'r')
		};
	} else {
		dayName = {
			en : new Array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'),
			es : new Array('Lun','Mar','Mie','Jue','Vie','Sab','Dom'),
			de : new Array('Mo','Di','Mi','Do','Fr','Sa','So'),
			no : new Array('Man','Tir','Ons','Tor','Fre','L'+String.fromCharCode(248)+'r','S'+String.fromCharCode(248)+'n')
		};
	}
	var visYear  = 0;
	var visMonth = 0;
	var bPageLoaded = false;
	var ie  = document.all;
	var dom = document.getElementById;
	var ns4 = document.layers;
	var opera = (navigator.userAgent.indexOf("Opera")!=-1)?true:false;
	var appVer = navigator.appVersion.toLowerCase();
	var is_minor;
	var is_major;
	var iePos  = appVer.indexOf('msie');
	if (iePos !=-1) {
		is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)))
	   	is_major = parseInt(is_minor);
	}
	var is_ie   = ((iePos!=-1) && (!opera));
	var is_ie5_5up =(is_ie && is_minor >= 5.5);
	var today    = new Date();
	var dateNow  = today.getDate();
	var monthNow = today.getMonth();
	//var yearNow  = today.getYear();
	var yearNow  = today.getFullYear();  //Fix opera year problem
	var imgsrc   = new Array('drop1.gif','drop2.gif','left1.gif','left2.gif','right1.gif','right2.gif');
	var img      = new Array();
	var bShow    = false;
	
	// range check
	var dateFromYear;
	var dateFromMonth;
	var dateFromDate;
	
	var dateToYear;
	var dateToMonth;
	var dateToDate;
	
	/* hides <select> and <applet> objects (for IE only) */
	function hideElement( elmID, overDiv ) {
		if(ie) {
	 		for(i = 0; i < document.all.tags( elmID ).length; i++) {
	  			obj = document.all.tags( elmID )[i];
	  			if(!obj || !obj.offsetParent) {
	  				continue;
	  			}
	
	  			// Find the element's offsetTop and offsetLeft relative to the BODY tag.
	  			objLeft   = obj.offsetLeft;
	  			objTop    = obj.offsetTop;
	  			objParent = obj.offsetParent;
	
	  			while(objParent.tagName.toUpperCase() != 'BODY') {
	   				objLeft  += objParent.offsetLeft;
	   				objTop   += objParent.offsetTop;
	   				objParent = objParent.offsetParent;
	  			}
	
	  			objHeight = obj.offsetHeight;
	  			objWidth  = obj.offsetWidth;
	
	  			if((overDiv.offsetLeft + overDiv.offsetWidth) <= objLeft);
	  			else if((overDiv.offsetTop + overDiv.offsetHeight) <= objTop);
	  			/* CHANGE by Charlie Roche for nested TDs*/
	  			else if(overDiv.offsetTop >= (objTop + objHeight + obj.height));
	  			/* END CHANGE */
	  			else if(overDiv.offsetLeft >= (objLeft + objWidth));
	  			else {
	   				obj.style.visibility = 'hidden';
	  			}
			}
		}
	}
	
	/*
	* unhides <select> and <applet> objects (for IE only)
	*/
	function showElement(elmID) {
		if(ie) {
	 		for(i = 0; i < document.all.tags( elmID ).length; i++) {
	  			obj = document.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);
	}
	
	if (dom) {
		for (i=0;i<imgsrc.length;i++) {
	 		img[i] = new Image;
	 		img[i].src = imgDir + imgsrc[i];
	}       
	
	addIFrame('calendariframe');
	document.write ('<div onclick="bShow=true" id="calendar" style="z-index:+999;position:absolute;visibility:hidden;"><table width="'+((showWeekNumber==1)?250:220)+'" style="font-family:Arial;font-size:11px;border: 1px solid #A0A0A0;" bgcolor="#ffffff"><tr bgcolor="#0000aa"><td><table width="'+((showWeekNumber==1)?248:218)+'"><tr><td style="padding:2px;font-family:Arial;font-size:11px;"><font color="#ffffff' + '' /*C9D3E9*/ +'"><b><span id="caption"></span></b></font></td><td align="right"><span id="lblClose"></span></td></tr></table></td></tr><tr><td style="padding:5px" bgcolor="#ffffff"><span id="content"></span></td></tr>');
	
	if (showToday == 1) {
		document.write ('<tr bgcolor="#f0f0f0"><td style="padding:5px" align="center"><span id="lblToday"></span></td></tr>');
	}
	
	document.write ('</table></div>');
	addIFrame('monthiframe');
	document.write ('<div id="selectMonth" style="position:absolute;visibility:hidden;z-index:+999;"></div>');
	addIFrame('yeariframe');
	document.write ('<div id="selectYear" style="position:absolute;visibility:hidden;z-index:+999;"></div>');
}

var styleAnchor = 'text-decoration:none;color:black;';
var styleLightBorder = 'border:1px solid #a0a0a0;';

function swapImage(srcImg, destImg) {
	if (ie) {
		document.getElementById(srcImg).setAttribute('src',imgDir + destImg);
	}
}

function init() {
	if (!ns4) {
 		//if (!ie) yearNow += 1900;
 		
 		crossobj=(dom)?document.getElementById('calendar').style: ie? document.all.calendar : window.document.getElementById('calendar');
 		alert(document.getElementById('calendar'));
 		hideCalendar();

 		crossMonthObj = (dom) ? document.getElementById('selectMonth').style : (ie) ? document.all.selectMonth : document.getElementById('selectMonth');

 		crossYearObj = (dom) ? document.getElementById('selectYear').style : ie ? document.all.selectYear : document.getElementById('selectYear');

 		monthConstructed = false;
 		yearConstructed = false;

		if (showToday == 1) {
 			document.getElementById('lblToday').innerHTML = '<font color="#000066">' + todayString[language] + ' <a onmousemove="window.status=\''+gotoString[language]+'\'" onmouseout="window.status=\'\'" title="'+gotoString[language]+'" style="'+styleAnchor+'" href="javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();">'+dayName[language][(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+', ' + dateNow + ' ' + monthName[language][monthNow].substring(0,3) + ' ' + yearNow + '</a></font>';
		}

		sHTML1 = '<span id="spanLeft" style="border:1px solid #36f;cursor:pointer" onmouseover="swapImage(\'changeLeft\',\'left2.gif\');this.style.borderColor=\'#8af\';window.status=\''+scrollLeftMessage[language]+'\'" onclick="decMonth()" onmouseout="clearInterval(intervalID1);swapImage(\'changeLeft\',\'left1.gif\');this.style.borderColor=\'#36f\';window.status=\'\'" onmousedown="clearTimeout(timeoutID1);timeoutID1=setTimeout(\'StartDecMonth()\',500)" onmouseup="clearTimeout(timeoutID1);clearInterval(intervalID1)">&nbsp<img id="changeLeft" src="'+imgDir+'left1.gif" width="10" height="11" border="0">&nbsp</span>&nbsp;';
		sHTML1 += '<span id="spanRight" style="border:1px solid #36f;cursor:pointer" onmouseover="swapImage(\'changeRight\',\'right2.gif\');this.style.borderColor=\'#8af\';window.status=\''+scrollRightMessage[language]+'\'" onmouseout="clearInterval(intervalID1);swapImage(\'changeRight\',\'right1.gif\');this.style.borderColor=\'#36f\';window.status=\'\'" onclick="incMonth()" onmousedown="clearTimeout(timeoutID1);timeoutID1=setTimeout(\'StartIncMonth()\',500)" onmouseup="clearTimeout(timeoutID1);clearInterval(intervalID1)">&nbsp<img id="changeRight" src="'+imgDir+'right1.gif" width="10" height="11" border="0">&nbsp</span>&nbsp;';
		sHTML1 += '<span id="spanMonth" style="border:1px solid #36f;cursor:pointer" onmouseover="swapImage(\'changeMonth\',\'drop2.gif\');this.style.borderColor=\'#8af\';window.status=\''+selectMonthMessage[language]+'\'" onmouseout="swapImage(\'changeMonth\',\'drop1.gif\');this.style.borderColor=\'#36f\';window.status=\'\'" onclick="popUpMonth()"></span>&nbsp;';
		sHTML1 += '<span id="spanYear" style="border:1px solid #36f;cursor:pointer" onmouseover="swapImage(\'changeYear\',\'drop2.gif\');this.style.borderColor=\'#8af\';window.status=\''+selectYearMessage[language]+'\'" onmouseout="swapImage(\'changeYear\',\'drop1.gif\');this.style.borderColor=\'#36f\';window.status=\'\'" onclick="popUpYear()"></span>&nbsp;';

		document.getElementById('caption').innerHTML = sHTML1;
	 	bPageLoaded=true;
	}
}

function hideCalendar() {
	crossobj.visibility = 'hidden';
	hideIFrame('calendariframe');

	if (crossMonthObj != null) {
		popDownMonth(); 
		//crossMonthObj.visibility = 'hidden';
	}
	if (crossYearObj  != null) {
		popDownYear();  
		//crossYearObj.visibility = 'hidden';
	}
	//showElement('SELECT');
	//showElement('APPLET');
	DoShowIEObjects();
}

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

function constructDate(d,m,y) {
	sTmp = dateFormat;
	sTmp = sTmp.replace ('dd','<e>');
	sTmp = sTmp.replace ('d','<d>');
	sTmp = sTmp.replace ('<e>',padZero(d));
	sTmp = sTmp.replace ('<d>',d);
	sTmp = sTmp.replace ('mmmm','<p>');
	sTmp = sTmp.replace ('mmm','<o>');
	sTmp = sTmp.replace ('mm','<n>');
	sTmp = sTmp.replace ('m','<m>');
	sTmp = sTmp.replace ('<m>',m+1);
	sTmp = sTmp.replace ('<n>',padZero(m+1));
	sTmp = sTmp.replace ('<o>',monthName[language][m]);
	sTmp = sTmp.replace ('<p>',monthName2[language][m]);
	sTmp = sTmp.replace ('yyyy',y);
	return sTmp.replace ('yy',padZero(y%100)) + ' 08:00:00 AM';
}

function closeCalendar() {
	hideCalendar();
	ctlToPlaceValue.value = constructDate(dateSelected,monthSelected,yearSelected);
	//Added by BAE
	if (enableCheckDate == 1) {
	  	checkReportDate();
	}
}

/*** Month Pulldown ***/
function StartDecMonth() {
	intervalID1 = setInterval("decMonth()",80);
}

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

function incMonth () {
	monthSelected++;
	monthConstructed = false;
	if (monthSelected > 11) {
 		monthSelected = 0;
 		yearSelected++;
 		yearConstructed = false;
	}
	constructCalendar();
}

function decMonth () {
	monthSelected--;
	monthConstructed = false;
	if (monthSelected < 0) {
 		monthSelected = 11;
 		yearSelected--;
 		yearConstructed = false;
	}
	constructCalendar();
}

function constructMonth() {
	popDownYear()
	if (!monthConstructed) {
 		sHTML = "";
 		for (i=0; i<12; i++) {
  			sName = monthName[language][i];
  			if (i == monthSelected){
   				sName = '<b>' + sName + '</b>';
  			}
  			sHTML += '<tr><td id="m' + i + '" onmouseover="this.style.backgroundColor=\'#909090\'" onmouseout="this.style.backgroundColor=\'\'" style="cursor:pointer" onclick="monthConstructed=false;monthSelected=' + i + ';constructCalendar();popDownMonth();event.cancelBubble=true"><font color="#0000aa">&nbsp;' + sName + '&nbsp;</font></td></tr>';
 		}

 		document.getElementById('selectMonth').innerHTML = '<table width="70" style="font-family:Arial;font-size:11px;border:1px solid #a0a0a0;" bgcolor="#f0f0f0" cellspacing="0" onmouseover="clearTimeout(timeoutID1)" onmouseout="clearTimeout(timeoutID1);timeoutID1=setTimeout(\'popDownMonth()\',100);event.cancelBubble=true">' + sHTML + '</table>';

 		monthConstructed = true;
	}
}

function popUpMonth() {
	if (visMonth == 1) {
 		popDownMonth();
 		visMonth--;
	} else {
 		constructMonth();
 		crossMonthObj.visibility = (dom||ie) ? 'visible' : 'show';
 		crossMonthObj.left = parseInt(crossobj.left) + 50;
 		crossMonthObj.top = parseInt(crossobj.top) + 26;
 		//hideElement('SELECT', document.getElementById('selectMonth'));
		//hideElement('APPLET', document.getElementById('selectMonth'));
		DoHideIEObjects('selectMonth');

		//sets the iframe size properties to the month div size properties
 		showIFrame('monthiframe', 'selectMonth', crossMonthObj);
 		visMonth++;
	}
}

function popDownMonth() {
	crossMonthObj.visibility = 'hidden';
	hideIFrame('monthiframe');
	visMonth = 0;
}

/*** Year Pulldown ***/
function incYear() {
	for (i=0; i<7; i++) {
 		newYear = (i + nStartingYear) + 1;
 		if (newYear == yearSelected) {
  			txtYear = '<span style="color:#006;font-weight:bold;">&nbsp;' + newYear + '&nbsp;</span>';
  		} else {
  			txtYear = '<span style="color:#006;">&nbsp;' + newYear + '&nbsp;</span>';
  		}
 		document.getElementById('y'+i).innerHTML = txtYear;
	}
	nStartingYear++;
	bShow=true;
}

function decYear() {
	for (i=0; i<7; i++) {
 		newYear = (i + nStartingYear) - 1;
 		if (newYear == yearSelected) {
  			txtYear = '<span style="color:#006;font-weight:bold">&nbsp;' + newYear + '&nbsp;</span>';
  		} else {
  			txtYear = '<span style="color:#006;">&nbsp;' + newYear + '&nbsp;</span>';
  		}
 		document.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 = '<tr><td align="center" onmouseover="this.style.backgroundColor=\'#909090\'" onmouseout="clearInterval(intervalID1);this.style.backgroundColor=\'\'" style="cursor:pointer" onmousedown="clearInterval(intervalID1);intervalID1=setInterval(\'decYear()\',30)" onmouseup="clearInterval(intervalID1)"><font color="#0000aa">-</font></td></tr>';

 		j = 0;
 		nStartingYear = yearSelected - 3;
 		for ( i = (yearSelected-3); i <= (yearSelected+3); i++ ) {
  			sName = i;
  			if (i == yearSelected) {
  				sName = '<b>' + sName + '</b>';
  			}
  			sHTML += '<tr><td id="y' + j + '" onmouseover="this.style.backgroundColor=\'#909090\'" onmouseout="this.style.backgroundColor=\'\'" style="cursor:pointer" onclick="selectYear('+j+');event.cancelBubble=true"><font color="#0000aa">&nbsp;' + sName + '&nbsp;</font></td></tr>';
  			j++;
 		}

 		sHTML += '<tr><td align="center" onmouseover="this.style.backgroundColor=\'#909090\'" onmouseout="clearInterval(intervalID2);this.style.backgroundColor=\'\'" style="cursor:pointer" onmousedown="clearInterval(intervalID2);intervalID2=setInterval(\'incYear()\',30)" onmouseup="clearInterval(intervalID2)"><font color="#0000aa">+</font></td></tr>';

 		document.getElementById('selectYear').innerHTML = '<table width="44" cellspacing="0" bgcolor="#f0f0f0" style="font-family:Arial;font-size:11px;border:1px solid #a0a0a0;" onmouseover="clearTimeout(timeoutID2)" onmouseout="clearTimeout(timeoutID2);timeoutID2=setTimeout(\'popDownYear()\',100)">' + sHTML + '</table>';

 		yearConstructed = true;
	}
}

function popDownYear() {
	clearInterval(intervalID1);
	clearTimeout(timeoutID1);
	clearInterval(intervalID2);
	clearTimeout(timeoutID2);
	crossYearObj.visibility= 'hidden';
	hideIFrame('yeariframe');
	visYear = 0;
}

function popUpYear() {
	var leftOffset
	if (visYear==1) {
 		popDownYear();
 		visYear--;
	} else {
 		constructYear();
 		crossYearObj.visibility = (dom||ie) ? 'visible' : 'show';
 		leftOffset = parseInt(crossobj.left) + document.getElementById('spanYear').offsetLeft;
 		if (ie) leftOffset += 6;
 		crossYearObj.left = leftOffset;
 		crossYearObj.top = parseInt(crossobj.top) + 26;
 		DoHideIEObjects('selectYear');
		//sets the iframe size properties to the year div size properties
  		showIFrame('yeariframe', 'selectYear', crossYearObj);
 		visYear++;
	}
}

/*** calendar ***/
function WeekNbr(n) {
	// Algorithm used:
	// From Klaus Tondering's Calendar document (The Authority/Guru)
	// [URL unfurl="true"]http://www.tondering.dk/claus/calendar.html[/URL]
	// 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 = '<table border="0" style="font-family:verdana;font-size:10px;"><tr>';

	if (showWeekNumber == 1) {
 		sHTML += '<td width="27"><b>' + weekString[language] + '</b></td><td width="1" rowspan="7" bgcolor="#d0d0d0" style="padding:0px"><img src="'+imgDir+'divider.gif" width="1"></td>';
	}

	for (i = 0; i<7; i++) {
 		sHTML += '<td width="27" align="right"><b><font color="#0000aa">' + dayName[language][i] + '</font></b></td>';
	}

	sHTML += '</tr><tr>';

	if (showWeekNumber == 1) {
 		sHTML += '<td align="right">' + WeekNbr(startDate) + '&nbsp;</td>';
	}

	for ( var i=1; i<=dayPointer;i++ ) {
 		sHTML += '<td>&nbsp;</td>';
	}

	for ( datePointer=1; datePointer <= numDaysInMonth; datePointer++ ) {
 		dayPointer++;
 		sHTML += '<td align="right">';
 		sStyle=styleAnchor;
 		if ((datePointer == odateSelected) && (monthSelected == omonthSelected) && (yearSelected == oyearSelected)) { 
 			sStyle+=styleLightBorder;
 		}

 		sHint = '';
 		for (k = 0;k < HolidaysCounter; k++) {
  			if ((parseInt(Holidays[k].d) == datePointer)&&(parseInt(Holidays[k].m) == (monthSelected+1))) {
   				if ((parseInt(Holidays[k].y)==0)||((parseInt(Holidays[k].y)==yearSelected)&&(parseInt(Holidays[k].y)!=0))) {
    				sStyle+= 'background-color:#3366ff;';
    				sHint += sHint=="" ? Holidays[k].desc : "\n"+Holidays[k].desc;
   				}
  			}
 		}

 		sHint = sHint.replace('/\"/g', '&quot;');

 		dateMessage = 'onmousemove="window.status=\''+selectDateMessage[language].replace('[date]',constructDate(datePointer,monthSelected,yearSelected))+'\'" onmouseout="window.status=\'\'" ';


		 //////////////////////////////////////////////
		 //////////  Modifications PinoToy  //////////
		 //////////////////////////////////////////////
		if (enableRange == 1) {
			var tmpFrom = parseInt('' + dateFromYear + padZero(dateFromMonth) + padZero(dateFromDate),10);
			var tmpTo = parseInt('' + dateToYear + padZero(dateToMonth) + padZero(dateToDate),10);
			var tmpCompare = parseInt('' + yearSelected + padZero(monthSelected) + padZero(datePointer),10);
			//alert('tmpFrom:' + tmpFrom + ' tmpCompare:' + tmpCompare + ' tmpTo:' + tmpTo);
			if (tmpCompare >= tmpFrom && tmpCompare <= tmpTo) {
				selDayAction = 'href="javascript:dateSelected=' + datePointer + ';closeCalendar();"';				
				isPast = 0;
				isFuture = 0;
				//alert("we have a match");
			} else {
				selDayAction = '';
				isPast = 1;
				isFuture = 1;
			}
		} else {	 
			if (((enablePast == 0 && ((yearSelected < yearNow) || (monthSelected < monthNow) && (yearSelected == yearNow) || (datePointer < dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow)))) ||
				((enableFuture == 0 && ((yearSelected > yearNow) || (monthSelected > monthNow) && (yearSelected == yearNow) || (datePointer > dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow))))) {
				selDayAction = '';
				isPast = 1;
				isFuture = 1;
			} else {
				selDayAction = 'href="javascript:dateSelected=' + datePointer + ';closeCalendar();"';
				isPast = 0;
				isFuture = 0;		
			}
		 }

 		if ((datePointer == dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow)) { ///// today
  			sHTML += "<b><a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' "+selDayAction+"><font color=#ff0000>&nbsp;" + datePointer + "</font>&nbsp;</a></b>";
 		} else if (dayPointer % 7 == (startAt * -1)+1) {         ///// SI ES DOMINGO
  			if ((isPast==1) || (isFuture==1)) {
   				sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' "+selDayAction+">&nbsp;<font color=#909090>" + datePointer + "</font>&nbsp;</a>";
   			} else {
			   	sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' "+selDayAction+">&nbsp;<font color=#88aaff>" + datePointer + "</font>&nbsp;</a>";
			}
		} else if ((dayPointer % 7 == (startAt * -1)+7 && startAt==1) || (dayPointer % 7 == startAt && startAt==0)) { ///// SI ES SABADO
  			if ((isPast==1) || (isFuture==1)) {
   				sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' "+selDayAction+">&nbsp;<font color=#909090>" + datePointer + "</font>&nbsp;</a>";
   			} else {
   				sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' "+selDayAction+">&nbsp;<font color=#88aaff>" + datePointer + "</font>&nbsp;</a>";
   			}
 		} else {                   ///// CUALQUIER OTRO DIA
  			if ((isPast==1) || (isFuture==1)) {
   				sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' "+selDayAction+">&nbsp;<font color=#909090>" + datePointer + "</font>&nbsp;</a>";
   			} else {
   				sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' "+selDayAction+">&nbsp;<font color=#0000aa>" + datePointer + "</font>&nbsp;</a>";
   			}
 		}

 		sHTML += '';
 		if (((dayPointer+startAt) % 7 == startAt) && (datePointer < numDaysInMonth)) {
  			sHTML += '</tr><tr>';
  			if (showWeekNumber == 1) {
   				sHTML += '<td align="right">' + (WeekNbr(new Date(yearSelected,monthSelected,datePointer+1))) + '&nbsp;</td>';
  			}
 		}
	}

	document.getElementById('content').innerHTML   = sHTML
	document.getElementById('spanMonth').innerHTML = '&nbsp;' + monthName[language][monthSelected] + '&nbsp;<img id="changeMonth" src="'+imgDir+'drop1.gif" width="12" height="10" border="0">'
	document.getElementById('spanYear').innerHTML  = '&nbsp;' + yearSelected + '&nbsp;<img id="changeYear" src="'+imgDir+'drop1.gif" width="12" height="10" border="0">';
	//The height of the calendar changes when changing months so we need to reset the Iframe
	showIFrame('calendariframe', 'calendar', crossobj);
}

function showCalendar(ctl, ctl2, format, lang, past, future, range, checkDate, fx, fy, week, start, from, to) {
	if (lang != null && lang != '') {
		language = lang;
	}
	if (past != null) {
		enablePast = past;
	} else {
		enablePast = 0;
	}
	if (future != null) {
		enableFuture = future;
	} else {
		enableFuture = 0;
	}
	
	if (range != null) {
		enableRange = range;
	} else {
		enableRange = 0;
	}
	
	if (checkDate != null) {
		enableCheckDate = checkDate;
	} else {
		enableCheckDate = 0;
	}
	if (fx != null) {
		fixedX = fx;
	} else {
		fixedX = -1;
	}
	if (fy != null) {
		fixedY = fy;
	} else {
		fixedY = -1;
	}
	if (week != null) {
		showWeekNumber = week;
	} else {
		showWeekNumber = 0;
	}
	if (start != null) {
		startAt = start;
	} else {
		startAt = 1;
	}
	//alert(from);
	if (from != null) {
		dateFromYear = from.getFullYear();
		dateFromMonth = from.getMonth();
		dateFromDate = from.getDate();
	} else {
		dateFromYear = 0;
		dateFromMonth = 0;
		dateFromDate = 0;
	}
	//alert(to);
	if (to != null) {
		dateToYear = to.getFullYear();
		dateToMonth = to.getMonth();
		dateToDate = to.getDate();
	} else {
		dateToYear = 0;
		dateToMonth = 0;
		dateToDate = 0;
	}

	if (showToday == 1) {
		document.getElementById('lblToday').innerHTML = '<font color="#000066">' + todayString[language] + ' <a onmousemove="window.status=\''+gotoString[language]+'\'" onmouseout="window.status=\'\'" title="'+gotoString[language]+'" style="'+styleAnchor+'" href="javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();">'+dayName[language][(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+', ' + dateNow + ' ' + monthName[language][monthNow].substring(0,3) + ' ' + yearNow + '</a></font>';
	}
	popUpCalendar(ctl, ctl2, format);
}

function popUpCalendar(ctl, ctl2, format) {
	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) {
      						formatChar = '';     // invalid date format
     					}
    				}
   				}
  			}

	  		tokensChanged = 0;
	  		if (formatChar != "") {
   				aData = ctl2.value.split(formatChar);   // use user's date
	
   				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] == monthName[language][j]) {
       							monthSelected=j;
       							tokensChanged++;
      						}
     					}
	    			} else if (aFormat[i] == "mmmm") {
	     				for (j=0; j<12; j++) {
    	  					if (aData[i] == monthName2[language][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');

  			crossobj.left = (fixedX == -1) ? ctl.offsetLeft + leftpos : fixedX;
	  		crossobj.top = (fixedY == -1) ? ctl.offsetTop + toppos + ctl.offsetHeight + 2 : fixedY;
	  		constructCalendar (1, monthSelected, yearSelected);
  			crossobj.visibility = (dom||ie) ? "visible" : "show";

   			//hideElement('SELECT', document.getElementById('calendar'));
	 		//hideElement('APPLET', document.getElementById('calendar'));
	    	DoHideIEObjects('calendar');
    	
    		//sets the iframe size properties to the calendar div size properties
	    	showIFrame('calendariframe', 'calendar', crossobj);
	
  			bShow = true;
	 	} else {
	  		hideCalendar();
  			if (ctlNow!=ctl) {
  				popUpCalendar(ctl, ctl2, format);
	  		}
	 	}
 		ctlNow = ctl;
	}
}

function addIFrame(id) {
	if (is_ie && is_ie5_5up) {
		document.write ('<iframe src=\"javascript:false;\" id=\"' + id + '\" scrolling=\"no\" frameborder=\"0\" style=\"position:absolute;top:0px;left:0px;z-index:+998;display:none\"></iframe>');
	}
}


function showIFrame(ctlifr, ctldiv, obj) {
	if (is_ie && is_ie5_5up) {
   		var ifr;
   		if(document.all[ctlifr]) {
     		ifr=document.all[ctlifr].style;
     		ifr.top=obj.top;
     		ifr.left=obj.left;
     		ifr.width=document.all[ctldiv].clientWidth;
     		ifr.height=document.all[ctldiv].clientHeight;
     		ifr.display='block';
   		}
 	}
}


function hideIFrame(ctlifr) {
	if (is_ie && is_ie5_5up) {
		var ifr;
 		if(document.all[ctlifr]) {
     		ifr = document.all[ctlifr].style;
     		ifr.top = 0;
     		ifr.left = 0;
     		ifr.width = 0;
     		ifr.height = 0;
     		ifr.display = 'none';
   		}
 	}
}

function DoShowIEObjects() {
	if (is_ie && !is_ie5_5up) {
  		showElement('SELECT');
   		showElement('APPLET');
   		showElement('OBJECT');
 	}
}   
   
function DoHideIEObjects(id) {
	if (is_ie && !is_ie5_5up) {
   		hideElement('SELECT', document.getElementById(id));
   		hideElement('APPLET', document.getElementById(id));
   		hideElement('OBJECT', document.getElementById(id));
 	}
}

document.onkeypress = function hidecal1 () {
	if (event.keyCode == 27) {
		hideCalendar();
	}
}

document.onclick = function hidecal2 () {
	if (!bShow) {
		hideCalendar();
	}
	bShow = false;
}

Date.prototype.addDays = function(num) {
	return new Date((num*1000*60*60*24)+this.valueOf());
}

if(ie) {
	init();
} else {
	window.onload = init;
}
 

Oh dear. Looks like it got truncated. Also, is this a JS file that is included on the page? If so, you'd need to include the page as well.

Or find a free web host and give us a URL!

Dan


[tt]D'ya think I got where I am today because I dress like Peter Pan here?[/tt]
[banghead]

 
OK. I will try and get it posted to a url. Thanks again for your help.
 
I was actually able to get it to work: I have a function showCalendar() that is associated with the onClick event of a 'div' tag in my web page. It needed the function init() to be called before it gets called, and that seemed to be failing. So, it turns out, instead of doing

window.onload = init

in the script, when I put the init() function right at the beginning of the showCalendar function, it works like it should in Mozilla. (?)
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top