????
| Current Path : /home2/morganrand/www/store/admin/includes/javascript/spiffyCal/ |
| Current File : /home2/morganrand/www/store/admin/includes/javascript/spiffyCal/spiffyCal_v2_1.js |
/*
* Bazillyo's Spiffy DHTML Popup Calendar Control - version 2.1
* �2001 S. Ousta
* see the included readme.htm file for license information and release notes.
*
* For more information see:
* http://www.geocities.com/bazillyo/spiffy/calendar/index.htm or
* http://groups.yahoo.com/group/spiffyDHTML or
* email me: bazillyo@yahoo.com
*
*/
// GLOBAL variables
var scImgPath = './includes/javascript/spiffyCal/images/';
var scIE=((navigator.appName == "Microsoft Internet Explorer") || ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5)));
var scNN6=((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5));
var scNN=((navigator.appName == "Netscape")&&(document.layers));
var img_Del=new Image();
var img_Close=new Image();
img_Del.src= scImgPath +"btn_del_small.gif";
img_Close.src= scImgPath +"btn_close_small.gif";
var scBTNMODE_DEFAULT=0;
var scBTNMODE_CUSTOMBLUE=1;
var scBTNMODE_CALBTN=2;
var focusHack;
/*================================================================================
* Calendar Manager Object
*
* the functions:
* isDate(), formatDate(), _isInteger(), _getInt(), and getDateFromFormat()
* are based on ones courtesy of Matt Kruse (mkruse@netexpress.net) http://www.mattkruse.com/javascript/
* with some modifications by myself and Michael Brydon
*
*/
function spiffyCalManager() {
this.showHelpAlerts = false;
this.defaultDateFormat='dd-MMM-yyyy';
this.lastSelectedDate=new Date();
this.calendars=new Array();
this.matchedFormat="";
this.DefBtnImgPath=scImgPath; //'./js/common/calendar/';
// methods ----------------------------------------------------------------------
this.getCount= new Function("return this.calendars.length;");
function addCalendar(objWhatCal) {
var intIndex = this.calendars.length;
this.calendars[intIndex] = objWhatCal;
}
this.addCalendar=addCalendar;
function hideAllCalendars(objExceptThisOne) {
var i=0;
for (i=0;i<this.calendars.length;i++) {
if (objExceptThisOne!=this.calendars[i]) {
this.calendars[i].hide();
}
}
}
this.hideAllCalendars=hideAllCalendars;
function swapImg(objWhatCal, strToWhat, blnStick) {
if (document.images) {
// this makes it so that the button sticks down when the cal is visible
if ((!(objWhatCal.visible) || (blnStick))&& (objWhatCal.enabled)) {
document.images[objWhatCal.btnName].src = eval(objWhatCal.varName+strToWhat + ".src");
}
}
window.status=' ';
// return true;
}
this.swapImg=swapImg;
// *** HOLIDAYS ***************************
this.Holidays = new Array("Dec-25","Jul-4", "Feb-14","Mar-17","Oct-31");
this.HolidaysDesc = new Array("Christmas Day","Independance Day","Valentine's Day","St. Patrick's Day","Halloween");
//*****************************************
function isHoliday(whatDate) {
var i=0;var found=-1;
for (i=0;i<this.Holidays.length;i++) {
if (whatDate==this.Holidays[i]) {
found=i;
break;
}
}
return found;
}
this.isHoliday=isHoliday;
this.AllowedFormats = new Array(
// Days first list
'd.M',
'd-M',
'd/M',
'd.MMM',
'd-MMM',
'd/MMM',
'd.M.yy',
'd-M-yy',
'd/M/yy',
'd.M.yyyy',
'd-M-yyyy',
'd/M/yyyy',
'd.MM.yyyy',
'd-MM-yyyy',
'd/MM/yyyy',
'd.MMM.yy',
'd-MMM-yy',
'd/MMM/yy',
'd.MMM.yyyy',
'd-MMM-yyyy',
'd/MMM/yyyy',
'd.MM.yy',
'd-MM-yy',
'd/MM/yy',
'dd.MM.yy',
'dd-MM-yy',
'dd/MM/yy',
'dd.M.yy',
'dd-M-yy',
'dd/M/yy',
'dd.MM.yyyy',
'dd-MM-yyyy',
'dd/MM/yyyy',
'dd.MMM.yy',
'dd-MMM-yy',
'dd/MMM/yy',
'dd.MMM.yyyy',
'dd-MMM-yyyy',
'dd/MMM/yyyy',
'M.d',
'M-d',
'M/d',
// Months first list
'MMM.d',
'MMM-d',
'MMM/d',
'M.d.yy',
'M-d-yy',
'M/d/yy',
'MM.d.yyyy',
'MM-d-yyyy',
'MM/d/yyyy',
'MMM.d.yy',
'MMM-d-yy',
'MMM/d/yy',
'MMM.d.yyyy',
'MMM-d-yyyy',
'MMM/d/yyyy',
'MM.d.yy',
'MM-d-yy',
'MM/d/yy',
'MM.dd.yy',
'MM-dd-yy',
'MM/dd/yy',
'M.dd.yy',
'M-dd-yy',
'M/dd/yy',
'MM.dd.yyyy',
'MM-dd-yyyy',
'MM/dd/yyyy',
'MMM.dd.yy',
'MMM-dd-yy',
'MMM/dd/yy',
'MMM.dd.yyyy',
'MMM-dd-yyyy',
'MMM/dd/yyyy'
);
var MONTH_NAMES = new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
this.lastBoxValidated=null;
function validateDate(eInput, bRequired, dStartDate, dEndDate){
var i = 0; var strTemp=''; var formatMatchCount=0; var firstMatchAt=0;var secondMatchAt=0;
var bOK = false; var bIsEmpty=false;
var strStart=MONTH_NAMES[dStartDate.getMonth()]+'-'+dStartDate.getDate()+'-'+dStartDate.getFullYear();
var strEnd=MONTH_NAMES[dEndDate.getMonth()]+'-'+dEndDate.getDate()+'-'+dEndDate.getFullYear();
var rangeMsg = 'This input box is set up to accept dates between:\n\n '+
strStart+'\n\nand\n\n '+strEnd+'\n\nPlease enter a date no ';
this.lastBoxValidated=eInput;
this.matchedFormat="";
bIsEmpty=(eInput.value=='' || eInput.value==null);
if (!(bRequired && bIsEmpty)) {
for(i=0;i<this.AllowedFormats.length;i++){
//alert('checking=eInput.value='+eInput.value+' this.AllowedFormats[i]='+this.AllowedFormats[i]+'\nisDate='+isDate(eInput.value, this.AllowedFormats[i]));
if (isDate(eInput.value, this.AllowedFormats[i])==true){
bOK = true;
formatMatchCount+=1;
if (formatMatchCount==1) {firstMatchAt=i;}
if (formatMatchCount>1) {
if (this.AllowedFormats[i].substr(0,1)!=this.AllowedFormats[firstMatchAt].substr(0,1)) {
secondMatchAt=i; break;
}
else { // don't count same format with padded zeros as a different format
formatMatchCount=1;
}
}
}
}
}
alert('formatMatchCount='+formatMatchCount);
if (formatMatchCount>1) {
if (this.showHelpAlerts) {
var date1=getDateFromFormat(eInput.value,this.AllowedFormats[firstMatchAt]);
var choice1 = MONTH_NAMES[date1.getMonth()]+'-'+date1.getDate()+'-'+date1.getFullYear();
var date2=getDateFromFormat(eInput.value,this.AllowedFormats[secondMatchAt]);
var choice2 = MONTH_NAMES[date2.getMonth()]+'-'+date2.getDate()+'-'+date2.getFullYear();
if (date1.getTime()!=date2.getTime()) {
var Msg='You have entered an ambiguous date.\n\n Click OK for:\n'+ choice1 +'\n\nor Click Cancel for:\n'+choice2;
if (confirm(Msg)) {
bOK=true;
}
else {
firstMatchAt=secondMatchAt;
bOK=true;
//return false;
}
eInput.focus();
eInput.select();
}
}
else {
// continue and take first match in list
bOK=true;
}
}
alert('TEST '+dThis.getDate()+"-"+dThis.getMonth());
if (bOK==true) {
eInput.className = "cal-TextBox";
//Check for Start/End Dates
if (dStartDate!=null) {
var dThis = getDateFromFormat(eInput.value,this.AllowedFormats[i]);
if (dStartDate>dThis){
eInput.className = "cal-TextBoxInvalid";
if (this.showHelpAlerts) { alert(rangeMsg + 'earlier than '+ strStart + '.');}
eInput.focus();
eInput.select();
return false;
}
}
if (dEndDate!=null) {
var dThis = getDateFromFormat(eInput.value,this.AllowedFormats[i]);
if (dEndDate<dThis) {
eInput.className = "cal-TextBoxInvalid";
if (this.showHelpAlerts) { alert(rangeMsg +'later than '+ strEnd + '.');}
eInput.focus();
eInput.select();
return false;
}
}
this.matchedFormat=this.AllowedFormats[firstMatchAt];
this.lastBoxValidated = null;
}
else {
if (bRequired && bIsEmpty) {
eInput.className = "cal-TextBoxInvalid";
if (this.showHelpAlerts) {
alert('This date field is required.\n\nPlease enter a valid date before proceeding.');
}
}
else {
if (!bRequired && bIsEmpty) {
eInput.className = "cal-TextBox";
}
else {
eInput.className = "cal-TextBoxInvalid";
if (this.showHelpAlerts) {
for(i=0;i<this.AllowedFormats.length;i++){
strTemp+=this.AllowedFormats[i]+'\t';
}
alert('Please enter a valid date.\n\nExample 01-Jan-2002\n\nValid formats are:\n\n'+strTemp);
}
}
}
eInput.focus();
eInput.select();
focusHack=eInput;
setTimeout('focusHack.focus();focusHack.select();');
return false;
}
}
this.validateDate=validateDate;
function formatDate(eInput, strFormat) {
//Always called directly following validateDate - put validate in onchange and format in onblur.
if(this.matchedFormat!="") {
var d = getDateFromFormat(eInput.value,this.matchedFormat);
if(d!=0){
eInput.value = scFormatDate(d, strFormat);
}
}
}
this.formatDate=formatDate;
function isDate(val,format) {
var date = getDateFromFormat(val,format);
if (date == 0) { return false; }
return true;
}
this.isDate=isDate;
function scFormatDate(date,format) {
format = format+"";
var result = "";
var i_format = 0;
var c = "";
var token = "";
var y = date.getFullYear()+"";
var M = date.getMonth()+1;
var d = date.getDate();
var h = date.getHours();
var m = date.getMinutes();
var s = date.getSeconds();
var yyyy,yy,MMM,MM,dd;
// Convert real date parts into formatted versions
// Year
if (y.length < 4) {
y = y-0+1900;
}
y = ""+y;
yyyy = y;
yy = y.substring(2,4);
// Month
if (M < 10) { MM = "0"+M; }
else { MM = M; }
MMM = MONTH_NAMES[M-1+12];
// Date
if (d < 10) { dd = "0"+d; }
else { dd = d; }
// Now put them all into an object!
var value = new Object();
value["yyyy"] = yyyy;
value["yy"] = yy;
value["y"] = y;
value["MMM"] = MMM;
value["MM"] = MM;
value["M"] = M;
value["dd"] = dd;
value["d"] = d;
while (i_format < format.length) {
// Get next token from format string
c = format.charAt(i_format);
token = "";
while ((format.charAt(i_format) == c) && (i_format < format.length)) {
token += format.charAt(i_format);
i_format++;
}
if (value[token] != null) {
result = result + value[token];
}
else {
result = result + token;
}
}
return result;
}
this.scFormatDate=scFormatDate;
function _isInteger(val) {
var digits = "1234567890";
for (var i=0; i < val.length; i++) {
if (digits.indexOf(val.charAt(i)) == -1) { return false; }
}
return true;
}
function _getInt(str,i,minlength,maxlength) {
for (x=maxlength; x>=minlength; x--) {
var token = str.substring(i,i+x);
if (_isInteger(token)) {
return token;
}
}
return null;
}
function getDateFromFormat(val,format) {
val = val+"";
format = format+"";
var i_val = 0;
var i_format = 0;
var c = "";
var token = "";
var token2= "";
var x,y;
var year = 0;
var month = 0;
var date = 0;
var bYearProvided = false;
while (i_format < format.length) {
// Get next token from format string
c = format.charAt(i_format);
token = "";
while ((format.charAt(i_format) == c) && (i_format < format.length)) {
token += format.charAt(i_format);
i_format++;
}
// Extract contents of value based on format token
if (token=="yyyy" || token=="yy" || token=="y") {
if (token=="yyyy") { x=4;y=4; }// 4-digit year
if (token=="yy") { x=2;y=2; }// 2-digit year
if (token=="y") { x=2;y=4; }// 2-or-4-digit year
year = _getInt(val,i_val,x,y);
bYearProvided = true;
if (year == null) {
return 0;
//Default to current year
}
if (year.length != token.length){
return 0;
}
i_val += year.length;
}
else if (token=="MMM") { // Month name
month = 0;
for (var i=0; i<MONTH_NAMES.length; i++) {
var month_name = MONTH_NAMES[i];
if (val.substring(i_val,i_val+month_name.length).toLowerCase() == month_name.toLowerCase()) {
month = i+1;
if (month>12) { month -= 12; }
i_val += month_name.length;
break;
}
}
if (month == 0) { return 0; }
if ((month < 1) || (month>12)) {
return 0
}
}
else if (token=="MM" || token=="M") {
x=token.length; y=2;
month = _getInt(val,i_val,x,y);
if (month == null) { return 0; }
if ((month < 1) || (month > 12)) { return 0; }
i_val += month.length;
}
else if (token=="dd" || token=="d") {
x=token.length; y=2;
date = _getInt(val,i_val,x,y);
if (date == null) { return 0; }
if ((date < 1) || (date>31)) { return 0; }
i_val += date.length;
}
else {
if (val.substring(i_val,i_val+token.length) != token) {
return 0;
}
else {
i_val += token.length;
}
}
}
// If there are any trailing characters left in the value, it doesn't match
if (i_val != val.length) {
return 0;
}
// Is date valid for month?
if (month == 2) {
// Check for leap year
if ( ( (year%4 == 0)&&(year%100 != 0) ) || (year%400 == 0) ) { // leap year
if (date > 29){ return false; }
}
else {
if (date > 28) { return false; }
}
}
if ((month==4)||(month==6)||(month==9)||(month==11)) {
if (date > 30) { return false; }
}
//JS dates uses 0 based months.
month = month - 1;
if (bYearProvided==false) {
//Default to current
var dCurrent = new Date();
year = dCurrent.getFullYear();
}
var lYear = parseInt(year);
if (lYear<=20) {
year = 2000 + lYear;
}
else if (lYear >=21 && lYear<=99) {
year = 1900 + lYear;
}
var newdate = new Date(year,month,date,0,0,0);
return newdate;
}
this.getDateFromFormat=getDateFromFormat;
}
var calMgr = new spiffyCalManager();
//================================================================================
// Calendar Object
function ctlSpiffyCalendarBox(strVarName, strFormName, strTextBoxName, strBtnName, strDefaultValue, intBtnMode) {
var msNames = new makeArray0('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var msDays = new makeArray0(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var msDOW = new makeArray0('S','M','T','W','T','F','S');
var blnInConstructor=true;
var img_DateBtn_UP=new Image();
var img_DateBtn_OVER=new Image();
var img_DateBtn_DOWN=new Image();
var img_DateBtn_DISABLED=new Image();
var strBtnW;
var strBtnH;
var strBtnImg;
var dteToday=new Date;
var dteCur=new Date;
var dteMin=new Date;
var dteMax=new Date;
var scX=4; // default where to display calendar
var scY=4;
// Defaults
var strDefDateFmt='dd-MMM-yyyy';
var intDefBtnMode=0;
var strDefBtnImgPath=calMgr.DefBtnImgPath;
/* PROPERTIES =============================================================
*
*/
// Generic Properties
this.varName=strVarName;
this.enabled=true;
this.readonly=false;
this.focusClick=false;
this.hideButton=false;
this.visible=false;
this.displayLeft=false;
this.displayTop=false;
// Name Properties
this.formName=strFormName;
this.textBoxName=strTextBoxName;
this.btnName=strBtnName;
this.required=false;
this.x=scX;
this.y=scY;
this.imgUp=img_DateBtn_UP;
this.imgOver=img_DateBtn_OVER;
this.imgDown=img_DateBtn_DOWN;
this.imgDisabled=img_DateBtn_DISABLED;
// look
this.showWeekends=true;
this.showHolidays=true;
this.disableWeekends=false;
this.disableHolidays=false;
this.textBoxWidth=160;
this.textBoxHeight=20;
this.btnImgWidth=strBtnW;
this.btnImgHeight=strBtnH;
if ((intBtnMode==null)||(intBtnMode<0 && intBtnMode>2)) {
intBtnMode=intDefBtnMode
}
switch (intBtnMode) {
case 0 :
strBtnImg=strDefBtnImgPath+'btn_date_up.gif';
img_DateBtn_UP.src=strDefBtnImgPath+'btn_date_up.gif';
img_DateBtn_OVER.src=strDefBtnImgPath+'btn_date_over.gif';
img_DateBtn_DOWN.src=strDefBtnImgPath+'btn_date_down.gif';
img_DateBtn_DISABLED.src=strDefBtnImgPath+'btn_date_disabled.gif';
strBtnW = '18';
strBtnH = '20';
break;
case 1 :
strBtnImg=strDefBtnImgPath+'btn_date1_up.gif';
img_DateBtn_UP.src=strDefBtnImgPath+'btn_date1_up.gif';
img_DateBtn_OVER.src=strDefBtnImgPath+'btn_date1_over.gif';
img_DateBtn_DOWN.src=strDefBtnImgPath+'btn_date1_down.gif';
img_DateBtn_DISABLED.src=strDefBtnImgPath+'btn_date1_disabled.gif';
strBtnW = '22';
strBtnH = '17';
break;
case 2 :
strBtnImg=strDefBtnImgPath+'btn_date2_up.gif';
img_DateBtn_UP.src=strDefBtnImgPath+'btn_date2_up.gif';
img_DateBtn_OVER.src=strDefBtnImgPath+'btn_date2_over.gif';
img_DateBtn_DOWN.src=strDefBtnImgPath+'btn_date2_down.gif';
img_DateBtn_DISABLED.src=strDefBtnImgPath+'btn_date2_disabled.gif';
strBtnW = '34';
strBtnH = '21';
break;
}
// Date Properties
this.dateFormat=strDefDateFmt;
this.useDateRange=false;
this.minDate=new Date;
this.maxDate=new Date(dteToday.getFullYear()+1, dteToday.getMonth(), dteToday.getDate());
this.minDay = function() {
return this.minDate.getDate();
}
this.minMonth = function() {
return this.minDate.getMonth();
}
this.minYear = function() {
return this.minDate.getFullYear();
}
this.maxDay = function() {
return this.maxDate.getDate();
}
this.maxMonth = function() {
return this.maxDate.getMonth();
}
this.maxYear = function() {
return this.maxYear.getFullYear();
}
function setMinDate(intYear, intMonth, intDay) {
this.minDate = new Date(intYear, intMonth-1, intDay);
}
this.setMinDate=setMinDate;
function setMaxDate(intYear, intMonth, intDay) {
this.maxDate = new Date(intYear, intMonth-1, intDay);
}
this.setMaxDate=setMaxDate;
this.minYearChoice=dteToday.getFullYear()-10;
this.maxYearChoice=dteToday.getFullYear()+10;
this.textBox= function() {
if (!blnInConstructor) {
return eval('document.'+this.formName+'.'+this.textBoxName);
}
}
this.getSelectedDate = function () {
var strTempVal=''; var objEle;
if ((typeof this.formName !='undefined') && (typeof this.textBoxName!='undefined')) {
objEle=eval('document.'+this.formName+'.'+this.textBoxName);
if (objEle && !blnInConstructor) {
strTempVal=eval('document.'+this.formName+'.'+this.textBoxName+'.value');
}
else {
strTempVal=strDefaultValue;
}
}
else {
strTempVal=strDefaultValue;
}
return strTempVal;
}
function setSelectedDate(strWhat) {
var strTempVal=''; var objEle;
eval('document.'+this.formName+'.'+this.textBoxName).value=strWhat;
if (!calMgr.isDate(quote(strWhat),quote(this.dateFormat))) {
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBoxInvalid";
}
else {
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBox";
}
}
this.setSelectedDate=setSelectedDate;
function disable() {
this.hide();
calMgr.swapImg(this,'.imgDisabled',false);
this.enabled=false;
eval('document.'+this.formName+'.'+this.textBoxName).disabled=true;
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBoxDisabled";
if (scNN) {
eval('document.'+this.formName+'.'+this.textBoxName).onFocus= function() {this.blur();};
}
}
this.disable=disable;
function enable() {
this.enabled=true;
calMgr.swapImg(this,'.imgUp',false);
eval('document.'+this.formName+'.'+this.textBoxName).disabled=false;
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBox";
if (scNN) {
eval('document.'+this.formName+'.'+this.textBoxName).onFocus= null;
}
if (!calMgr.isDate(quote(this.getSelectedDate()),quote(this.dateFormat))) {
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBoxInvalid";
}
}
this.enable=enable;
// behavior Properties
this.JStoRunOnSelect='';
this.JStoRunOnClear='';
this.JStoRunOnCancel='';
this.hideCombos=true;
/* METHODS ===============================================================
*
*/
function makeCalendar(intWhatMonth,intWhatYear,bViewOnly) {
if (bViewOnly) {intWhatMonth-=1;}
var strOutput = '';
var intStartMonth=intWhatMonth;
var intStartYear=intWhatYear;
var intLoop;
var strTemp='';
var strDateColWidth;
var isWE = false;
dteCur.setMonth(intWhatMonth);
dteCur.setFullYear(intWhatYear);
dteCur.setDate(dteToday.getDate());
dteCur.setHours(0);dteCur.setMinutes(0);dteCur.setSeconds(0);dteCur.setMilliseconds(0);
if (!(bViewOnly)) {
strTemp='<form name="spiffyCal">';
}
// special case for form not to be inside table in Netscape 6
if (scNN6) {
strOutput += strTemp +'<table width="185" border="3" class="cal-Table" cellspacing="0" cellpadding="0"><tr>';
}
else {
strOutput += '<table width="185" border="3" class="cal-Table" cellspacing="0" cellpadding="0">'+strTemp+'<tr>';
}
if (!(bViewOnly)) {
strOutput += '<td class="cal-HeadCell" align="center" width="100%"><a href="javascript:'+this.varName+'.clearDay();"><img name="calbtn1" src="'+strDefBtnImgPath+'btn_del_small.gif" border="0" width="12" height="10"></a> <a href="javascript:'+this.varName+'.scrollMonth(-1);" class="cal-DayLink"><</a> <SELECT class="cal-ComboBox" NAME="cboMonth" onChange="'+this.varName+'.changeMonth();">';
for (intLoop=0; intLoop<12; intLoop++) {
if (intLoop == intWhatMonth) strOutput += '<OPTION VALUE="' + intLoop + '" SELECTED>' + msNames[intLoop] + '<\/OPTION>';
else strOutput += '<OPTION VALUE="' + intLoop + '">' + msNames[intLoop] + '<\/OPTION>';
}
strOutput += '<\/SELECT><SELECT class="cal-ComboBox" NAME="cboYear" onChange="'+this.varName+'.changeYear();">';
for (intLoop=this.minYearChoice; intLoop<this.maxYearChoice; intLoop++) {
if (intLoop == intWhatYear) strOutput += '<OPTION VALUE="' + intLoop + '" SELECTED>' + intLoop + '<\/OPTION>';
else strOutput += '<OPTION VALUE="' + intLoop + '">' + intLoop + '<\/OPTION>';
}
strOutput += '<\/SELECT> <a href="javascript:'+this.varName+'.scrollMonth(1);" class="cal-DayLink">></a> <a href="javascript:'+this.varName+'.hide();"><img name="calbtn2" src="'+strDefBtnImgPath+'btn_close_small.gif" border="0" width="12" height="10"></a><\/td><\/tr><tr><td width="100%" align="center">';
}
else {
strOutput += '<td class="cal-HeadCell" align="center" width="100%">'+msNames[intWhatMonth]+'-'+intWhatYear+'<\/td><\/tr><tr><td width="100%" align="center">';
}
firstDay = new Date(intWhatYear,intWhatMonth,1);
startDay = firstDay.getDay();
if (((intWhatYear % 4 == 0) && (intWhatYear % 100 != 0)) || (intWhatYear % 400 == 0))
msDays[1] = 29;
else
msDays[1] = 28;
strOutput += '<table width="185" cellspacing="1" cellpadding="2" border="0"><tr>';
// Header ROW showing days of week here
for (intLoop=0; intLoop<7; intLoop++) {
if (intLoop==0 || intLoop==6) {
strDateColWidth="15%"
}
else
{
strDateColWidth="14%"
}
strOutput += '<td class="cal-HeadCell" width="' + strDateColWidth + '" align="center" valign="middle">'+ msDOW[intLoop] +'<\/td>';
}
strOutput += '<\/tr><tr>';
var intColumn = 0;
var intLastMonth = intWhatMonth - 1;
var intLastYear = intWhatYear;
if (intLastMonth == -1) { intLastMonth = 11; intLastYear=intLastYear-1;}
// Show last month's days in first row
for (intLoop=0; intLoop<startDay; intLoop++, intColumn++) {
strOutput += this.getDayLink(true,(msDays[intLastMonth]-startDay+intLoop+1),intLastMonth,intLastYear,bViewOnly,isWE);
}
// Show this month's days
for (intLoop=1; intLoop<=msDays[intWhatMonth]; intLoop++, intColumn++) {
if ((intColumn % 6)==0) {isWE=true } else {isWE=false}
strOutput += this.getDayLink(false,intLoop,intWhatMonth,intWhatYear,bViewOnly,isWE);
if (intColumn == 6) {
strOutput += '<\/tr><tr>';
intColumn = -1;
}
}
var intNextMonth = intWhatMonth+1;
var intNextYear = intWhatYear;
if (intNextMonth==12) { intNextMonth=0; intNextYear=intNextYear+1;}
// Show next month's days in last row
if (intColumn > 0) {
for (intLoop=1; intColumn<7; intLoop++, intColumn++) {
strOutput += this.getDayLink(true,intLoop,intNextMonth,intNextYear,bViewOnly);
}
strOutput += '<\/tr><\/table><\/td><\/tr>';
}
else {
strOutput = strOutput.substr(0,strOutput.length-4); // remove the <tr> from the end if there's no last row
strOutput += '<\/table><\/td><\/tr>';
}
if (scNN6) {
strOutput += '<\/table><\/form>';
}
else {
strOutput += '<\/form><\/table>';
}
dteCur.setDate(1);
dteCur.setHours(0);dteCur.setMinutes(0);dteCur.setSeconds(0);dteCur.setMilliseconds(0);
dteCur.setMonth(intStartMonth);
dteCur.setFullYear(intStartYear);
return strOutput;
}
this.makeCalendar=makeCalendar;
// writeControl -------------------------------------
//
function writeControl() {
var strHold='';
var strTemp='';
var strTempMinDate='';
var strTempMaxDate='';
// specify whether you can type in the date box and validate them as well
// or whether you must use the calendar only to select a date
if (this.readonly) {
strTemp=' onFocus="this.blur();" readonly ';
}
if (this.focusClick) {
strTemp=' onFocus="'+this.varName+'.show();" ';
}
if (!(this.useDateRange)) {
strTemp+=' onChange="calMgr.validateDate(document.'+this.formName+'.'+this.textBoxName+','+this.varName+'.required);" onBlur="calMgr.formatDate(document.'+this.formName+'.'+this.textBoxName+','+this.varName+'.dateFormat);" ';
}
else {
strTempMinDate=this.minDate.getDate()+'-'+msNames[this.minDate.getMonth()]+'-'+this.minDate.getFullYear();
strTempMaxDate=this.maxDate.getDate()+'-'+msNames[this.maxDate.getMonth()]+'-'+this.maxDate.getFullYear();
strTemp+=' onChange="calMgr.validateDate('+'document.'+this.formName+'.'+this.textBoxName+','+this.varName+'.required,'+this.varName+'.minDate,'+this.varName+'.maxDate);" onBlur="calMgr.formatDate(document.'+this.formName+'.'+this.textBoxName+','+this.varName+'.dateFormat);" ';
}
strHold='<input class="cal-TextBox" type="text" name="' + this.textBoxName + '"' + strTemp + 'size="12" value="' + this.getSelectedDate() + '">';
if (!scIE) {
strTemp=' href="javascript:calClick();return false;" ';
}
else {
strTemp='';
}
if ((this.focusClick==false) || (this.focusClick==true && this.hideButton==false)) {
strHold+='<a class="so-BtnLink"'+strTemp;
strHold+=' onmouseover="calMgr.swapImg(' + this.varName + ',\'.imgOver\',false);" ';
strHold+='onmouseout="calMgr.swapImg(' + this.varName + ',\'.imgUp\',false);" ';
strHold+='onclick="calMgr.swapImg(' + this.varName + ',\'.imgDown\',true);';
// strHold+=this.varName+'.show();return false;">';
strHold+=this.varName+'.show();">';
strHold+='<img align="absmiddle" border="0" name="' + this.btnName + '" src="' + strBtnImg +'" width="'+ strBtnW +'" height="'+ strBtnH +'"></a>';
}
document.write(strHold);
}
this.writeControl=writeControl;
// show -------------------------------------
//
function show() {
var strCurSelDate = calMgr.lastSelectedDate;
if (!this.enabled) { return }
calMgr.hideAllCalendars(this);
if (this.visible) {
this.hide();
}
else {
// put these next 2 lines in when the tiny cal btns seem to randomly disappear
if (document.images['calbtn1']!=null ) document.images['calbtn1'].src=img_Del.src;
if (document.images['calbtn2']!=null ) document.images['calbtn2'].src=img_Close.src;
if (this.focusClick==true && this.hideButton==true) {
//if no dropdown button then use user-provided location for it
scX=this.x;
scY=this.y;
}
else {
// get correct position of date btn
if ( scIE ) {
if (this.displayLeft) {
scX = getOffsetLeft(document.images[this.btnName])-192+ document.images[this.btnName].width ;
}
else {
scX = getOffsetLeft(document.images[this.btnName]);
}
if (this.displayTop) {
scY = getOffsetTop(document.images[this.btnName]) -138 ;
}
else {
scY = getOffsetTop(document.images[this.btnName]) + document.images[this.btnName].height + 2;
}
}
else if (scNN){
if (this.displayLeft) {
scX = document.images[this.btnName].x - 192+ document.images[this.btnName].width;
}
else {
scX = document.images[this.btnName].x;
}
if (this.displayTop) {
scY = document.images[this.btnName].y -134;
}
else {
scY = document.images[this.btnName].y + document.images[this.btnName].height + 2;
}
}
}
// hide all combos underneath it
if (this.hideCombos) {toggleCombos('hidden');}
// pop calendar up to the correct month and year if there's a date there
// otherwise pop it up using today's month and year
if (this.getSelectedDate()==''){
if (!(dteCur)) {
domlay('spiffycalendar',1,scX,scY,this.makeCalendar(dteToday.getMonth(),dteToday.getFullYear()));
}
else {
domlay('spiffycalendar',1,scX,scY,this.makeCalendar(dteCur.getMonth(),dteCur.getFullYear()));
}
}
else {
if (calMgr.isDate(quote(this.getSelectedDate()),quote(this.dateFormat))) {
dteCur = calMgr.getDateFromFormat(quote(this.getSelectedDate()),quote(this.dateFormat));
dteCur.setHours(0);dteCur.setMinutes(0);dteCur.setSeconds(0);dteCur.setMilliseconds(0);
}
else {
dteCur=calMgr.lastSelectedDate;
}
domlay('spiffycalendar',1,scX,scY,this.makeCalendar(dteCur.getMonth(),dteCur.getFullYear()));
}
this.visible=true;
}
}
this.show=show;
// hide -------------------------------------
//
function hide() {
domlay('spiffycalendar',0,scX,scY);
this.visible = false;
calMgr.swapImg(this,'.imgUp',false);
if (this.hideCombos) {toggleCombos('visible');}
}
this.hide=hide;
// clearDay -------------------------------------
//
function clearDay() {
eval('document.' + this.formName + '.' + this.textBoxName + '.value = \'\'');
this.hide();
if (this.JStoRunOnClear!=null)
eval(unescape(this.JStoRunOnClear));
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBox";
if (this.required) {
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBoxInvalid";
}
}
this.clearDay=clearDay;
// changeDay -------------------------------------
//
function changeDay(intWhatDay) {
dteCur.setDate(intWhatDay);
dteCur.setHours(0);dteCur.setMinutes(0);dteCur.setSeconds(0);dteCur.setMilliseconds(0);
this.textBox().value=calMgr.scFormatDate(dteCur,this.dateFormat);
this.hide();
if (this.JStoRunOnSelect!=null)
eval(unescape(this.JStoRunOnSelect));
eval('document.'+this.formName+'.'+this.textBoxName).className = "cal-TextBox";
}
this.changeDay=changeDay;
// scrollMonth -------------------------------------
//
function scrollMonth(intAmount) {
var intMonthCheck;
var intYearCheck;
if (scIE) {
intMonthCheck = document.forms["spiffyCal"].cboMonth.selectedIndex + intAmount;
}
else if (scNN) {
intMonthCheck = document.spiffycalendar.document.forms["spiffyCal"].cboMonth.selectedIndex + intAmount;
}
if (intMonthCheck < 0) {
intYearCheck = dteCur.getFullYear() - 1;
if ( intYearCheck < this.minYearChoice ) {
intYearCheck = this.minYearChoice;
intMonthCheck = 0;
}
else {
intMonthCheck = 11;
}
dteCur.setFullYear(intYearCheck);
}
else if (intMonthCheck >11) {
intYearCheck = dteCur.getFullYear() + 1;
if ( intYearCheck > this.maxYearChoice-1 ) {
intYearCheck = this.maxYearChoice-1;
intMonthCheck = 11;
}
else {
intMonthCheck = 0;
}
dteCur.setFullYear(intYearCheck);
}
if (scIE) {
dteCur.setMonth(document.forms["spiffyCal"].cboMonth.options[intMonthCheck].value);
}
else if (scNN) {
dteCur.setMonth(document.spiffycalendar.document.forms["spiffyCal"].cboMonth.options[intMonthCheck].value );
}
domlay('spiffycalendar',1,scX,scY,this.makeCalendar(dteCur.getMonth(),dteCur.getFullYear()));
}
this.scrollMonth=scrollMonth;
// changeMonth -------------------------------------
//
function changeMonth() {
if (scIE) {
dteCur.setMonth(document.forms["spiffyCal"].cboMonth.options[document.forms["spiffyCal"].cboMonth.selectedIndex].value);
domlay('spiffycalendar',1,scX,scY,this.makeCalendar(dteCur.getMonth(),dteCur.getFullYear()));
}
else if (scNN) {
dteCur.setMonth(document.spiffycalendar.document.forms["spiffyCal"].cboMonth.options[document.spiffycalendar.document.forms["spiffyCal"].cboMonth.selectedIndex].value);
domlay('spiffycalendar',1,scX,scY,this.makeCalendar(dteCur.getMonth(),dteCur.getFullYear()));
}
}
this.changeMonth=changeMonth;
// changeYear -------------------------------------
//
function changeYear() {
if (scIE) {
dteCur.setFullYear(document.forms["spiffyCal"].cboYear.options[document.forms["spiffyCal"].cboYear.selectedIndex].value);
domlay('spiffycalendar',1,scX,scY,this.makeCalendar(dteCur.getMonth(),dteCur.getFullYear()));
}
else if (scNN) {
dteCur.setFullYear(document.spiffycalendar.document.forms["spiffyCal"].cboYear.options[document.spiffycalendar.document.forms["spiffyCal"].cboYear.selectedIndex].value);
domlay('spiffycalendar',1,scX,scY,this.makeCalendar(dteCur.getMonth(),dteCur.getFullYear()));
}
}
this.changeYear=changeYear;
function getDayLink(blnIsGreyDate,intLinkDay,intLinkMonth,intLinkYear,bViewOnly,isWE) {
var templink; var tempLinkClass='calDay-Link';
var tempClass='cal-DayCell';
var tempDt=''; var isHol=-1; var holTxt='';
if (isWE==true && this.showWeekends==true) {tempClass='cal-WeekendCell';}
tempDt=msNames[intLinkMonth]+'-'+intLinkDay;
if (this.showHolidays) {isHol=calMgr.isHoliday(tempDt); if (isHol!=-1) {holTxt=' title="'+calMgr.HolidaysDesc[isHol]+'"'; tempClass='cal-HolidayCell';}}
if (!(this.useDateRange)) {
if (blnIsGreyDate) {
templink='<td align="center" class="cal-GreyDate">' + intLinkDay + '<\/td>';
}
else {
if (isDayToday(intLinkDay)) {
if (!(bViewOnly)) {
templink='<td align="center" class="'+tempClass+'">' + '<a class="cal-TodayLink" '+holTxt+' onmouseover="self.status=\' \';return true" href="javascript:'+this.varName+'.changeDay(' + intLinkDay + ');">' + intLinkDay + '<\/a><\/td>';
}
else {
templink='<td align="center" class="'+tempClass+'"><span class="cal-Today">' + intLinkDay +'<\/span><\/td>';
}
}
else {
if (!(bViewOnly)) {
templink='<td align="center" class="'+tempClass+'">' + '<a class="cal-DayLink" '+holTxt+' onmouseover="self.status=\' \';return true" href="javascript:'+this.varName+'.changeDay(' + intLinkDay + ');">' + intLinkDay + '<\/a>' +'<\/td>';
}
else {
templink='<td align="center" class="'+tempClass+'"><span class="cal-Day">' + intLinkDay + '<\/span><\/td>';
}
}
}
}
else {
if (this.isDayValid(intLinkDay,intLinkMonth,intLinkYear)) {
if (blnIsGreyDate){
templink='<td align="center" class="cal-GreyDate">' + intLinkDay + '<\/td>';
}
else {
if (isDayToday(intLinkDay)) {
if (!(bViewOnly)) {
templink='<td align="center" class="'+tempClass+'">' + '<a class="cal-TodayLink" '+holTxt+' onmouseover="self.status=\' \';return true" href="javascript:'+this.varName+'.changeDay(' + intLinkDay + ');">' + intLinkDay + '<\/a>' +'<\/td>';
}
else {
templink='<td align="center" class="'+tempClass+'"><span class="cal-Today">' + intLinkDay + '<\/span><\/td>';
}
}
else {
if (!(bViewOnly)) {
templink='<td align="center" class="'+tempClass+'">' + '<a class="cal-DayLink" '+holTxt+' onmouseover="self.status=\' \';return true" href="javascript:'+this.varName+'.changeDay(' + intLinkDay + ');">' + intLinkDay + '<\/a>' +'<\/td>';
}
else {
templink='<td align="center" class="'+tempClass+'"><span class="cal-Day">' + intLinkDay +'<\/span><\/td>';
}
}
}
}
else {
templink='<td align="center" class="cal-GreyInvalidDate">'+ intLinkDay + '<\/td>';
}
}
return templink;
}
this.getDayLink=getDayLink;
// EXTRA Private FUNCTIONS ===============================================================
function toggleCombos(showHow){
var i; var j;
var cboX; var cboY;
for (i=0;i<document.forms.length;i++) {
for (j=0;j<document.forms[i].elements.length;j++) {
if (document.forms[i].elements[j].tagName == "SELECT") {
if (document.forms[i].name != "spiffyCal") {
cboX = getOffsetLeft(document.forms[i].elements[j]);
cboY = getOffsetTop(document.forms[i].elements[j]);
if ( ((cboX>=scX-15) && (cboX<=scX+200)) && ((cboY>=scY-15) && (cboY<=scY+145)) )
document.forms[i].elements[j].style.visibility=showHow;
//Check for right hand side overlapping.
cboX = cboX + parseInt(document.forms[i].elements[j].style.width);
cboY=cboY+15;//cbo height (default)
if ( ((cboX>=scX+15) && (cboX<=scX+200)) && ((cboY>=scY-15) && (cboY<=scY+145)) )
document.forms[i].elements[j].style.visibility=showHow;
}
}
}
}
}
function isDayToday(intWhatDay) {
if ((dteCur.getFullYear() == dteToday.getFullYear()) && (dteCur.getMonth() == dteToday.getMonth()) && (intWhatDay == dteToday.getDate())) {
return true;
}
else {
return false;
}
}
function isDayValid(intWhatDay, intWhatMonth, intWhatYear){
dteCur.setDate(intWhatDay);
dteCur.setMonth(intWhatMonth);
dteCur.setFullYear(intWhatYear);
dteCur.setHours(0);dteCur.setMinutes(0);dteCur.setSeconds(0);dteCur.setMilliseconds(0);
if ((dteCur>=this.minDate) && (dteCur<=this.maxDate)) {
return true;
}
else {
return false;
}
}
this.isDayValid=isDayValid;
calMgr.addCalendar(this);
blnInConstructor=false;
}
// Utility functions----------------------------------
function quote(sWhat) {
return '\''+sWhat+'\'';
}
function getOffsetLeft (el) {
var ol = el.offsetLeft;
while ((el = el.offsetParent) != null)
ol += el.offsetLeft;
return ol;
}
function getOffsetTop (el) {
var ot = el.offsetTop;
while((el = el.offsetParent) != null)
ot += el.offsetTop;
return ot;
}
function calClick() {
window.focus();
}
function domlay(id,trigger,lax,lay,content) {
/*
* Cross browser Layer visibility / Placement Routine
* Done by Chris Heilmann (mail@ichwill.net)
* http://www.ichwill.net/mom/domlay/
* Feel free to use with these lines included!
* Created with help from Scott Andrews.
* The marked part of the content change routine is taken
* from a script by Reyn posted in the DHTML
* Forum at Website Attraction and changed to work with
* any layername. Cheers to that!
* Welcome DOM-1, about time you got included... :)
*/
// Layer visible
if (trigger=="1"){
if (document.layers) document.layers[''+id+''].visibility = "show"
else if (document.all) document.all[''+id+''].style.visibility = "visible"
else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "visible"
}
// Layer hidden
else if (trigger=="0"){
if (document.layers) document.layers[''+id+''].visibility = "hide"
else if (document.all) document.all[''+id+''].style.visibility = "hidden"
else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "hidden"
}
// Set horizontal position
if (lax){
if (document.layers){document.layers[''+id+''].left = lax}
else if (document.all){document.all[''+id+''].style.left=lax}
else if (document.getElementById){document.getElementById(''+id+'').style.left=lax+"px"}
}
// Set vertical position
if (lay){
if (document.layers){document.layers[''+id+''].top = lay}
else if (document.all){document.all[''+id+''].style.top=lay}
else if (document.getElementById){document.getElementById(''+id+'').style.top=lay+"px"}
}
// change content
if (content){
if (document.layers){
sprite=document.layers[''+id+''].document;
// add father layers if needed! document.layers[''+father+'']...
sprite.open();
sprite.write(content);
sprite.close();
}
else if (document.all) document.all[''+id+''].innerHTML = content;
else if (document.getElementById){
//Thanx Reyn!
rng = document.createRange();
el = document.getElementById(''+id+'');
rng.setStartBefore(el);
htmlFrag = rng.createContextualFragment(content)
while(el.hasChildNodes()) el.removeChild(el.lastChild);
el.appendChild(htmlFrag);
// end of Reyn ;)
}
}
}
function makeArray0() {
for (i = 0; i<makeArray0.arguments.length; i++)
this[i] = makeArray0.arguments[i];
}
//---------------------------------------