// *****************************************************************************
//      Simple Calendar Widget - Cross-Browser Javascript pop-up calendar.
//
//   Copyright (C) 2005-2006  Anthony Garrett
//
//   This library is free software; you can redistribute it and/or
//   modify it under the terms of the GNU Lesser General Public
//   License as published by the Free Software Foundation; either
//   version 2.1 of the License, or (at your option) any later version.
//
//   This library is distributed in the hope that it will be useful,
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//   Lesser General Public License for more details.
//
//   You should have received a copy of the GNU Lesser General Public
//   License along with this library; if not, it is available at
//   the GNU web site (http://www.gnu.org/) or by writing to the
//   Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
//   Boston, MA  02110-1301  USA
//
// *****************************************************************************
//
// Contact:   Sorry, I can't offer support for this but if you find a problem
//            (or just want to tell me how useful you find it), please send
//            me an email at scwfeedback@tarrget.info (Note the two Rs in
//            tarrget).  I will try to fix problems quickly but this is a
//            spare time thing for me.
//
// Credits:   I wrote this from scratch myself but I couldn't have done it
//            without the superb "JavaScript The Definitive Guide" by David
//            Flanagan (Pub. O'Reilly ISBN 0-596-00048-0).  I also recognise
//            a contribution from my experience with PopCalendar 4.1 by
//            Liming(Victor) Weng.
//
// Link back: Please give me credit and link back to my page.  To ensure that
//            search engines give my page a higher ranking you can add the
//            following HTML to any indexed page on your web site:
//
//            <A HREF="http://www.tarrget.info/calendar/scw.htm">
//              Simple Calendar Widget by Anthony Garrett
//            </A>
//
// Features:  Easily customised
//                  (output date format, colours, language, year range and
//                   week start day)
//            Accepts a date as input
//                  (see comments below for formats).
//            Cross-browser code tested against;
//                  Internet Explorer 6.0.28     Mozilla  1.7.1
//                  Opera             7.52+      Firefox  0.9.1+
//                  Konqueror         3.4.0      Flock    0.4.9
//
// How to add the Calendar to your page:
//            This script needs to be defined for your page so, immediately
//            after the BODY tag add the following line;
//
//                  <script type='Text/JavaScript' src='scw.js'></script>
//
//            Your root directory of the web site should also contain an empty
//            file called "scwblank.html". See
//                  http://www.tarrget.info/calendar/IEnightmare.html
//            for a full explanation.
//

var scwDateNow=new Date(Date.parse(new Date().toDateString()));
var scwBaseYear=scwDateNow.getFullYear();
var scwDropDownYears		 	= 1; // dynamically overwritten in getDateRange function
var scwWeekStart				= 0; // Sunday
var scwWeekendDay1				= 5; // Friday
var scwWeekendDay2				= 6; // Saturday
var scwWeekNumberDisplay		= false;
var scwWeekNumberBaseDay		= 4;
var scwShowInvalidDateMsg		= true;
var scwShowOutOfRangeMsg		= true;
var scwShowDoesNotExistMsg		= true;
var scwShowInvalidAlert			= true;
var scwShowDateDisablingError	= true;
var scwShowRangeDisablingError	= true;
var scwArrDelimiters			= ['/','-','.',',',' '];
var scwDateDisplayFormat		= 'dd.mm.yyyy';
var scwDateOutputFormat			= 'DD.MM.YYYY';
var scwDateInputSequence		= 'DMY';
var scwZindex					= 1;
var scwBlnStrict				= false;
var scwEnabledDay				= [true,true,true,true,true,true,true,
									true,true,true,true,true,true,true,
									true,true,true,true,true,true,true,
									true,true,true,true,true,true,true,
									true,true,true,true,true,true,true,
									true,true,true,true,true,true,true];
var scwDisabledDates			= new Array();
var scwActiveToday				= true;
var scwOutOfMonthDisable		= false;
var scwOutOfMonthHide			= false;
var scwOutOfRangeDisable		= true; 
var scwFormatTodayCell			= true;
var scwTodayCellBorderColour	= '#940028';
var scwAllowDrag				= false;  
var scwClickToHide				= true;
var scwMonthSum 				= 0;
var scwBlnFullInputDate 		= false;
var scwPassEnabledDay 			= new Array();
var scwSeedDate 				= new Date();
var scwParmActiveToday 			= true;
var scwWeekStart 				= scwWeekStart%7;
var scwTargetEle;
var scwTriggerEle;
var scwToday;
var scwDrag;
var scwArrMonthNames;
var scwArrWeekInits;
var scwInvalidDateMsg;
var scwOutOfRangeMsg;
var scwDoesNotExistMsg;
var scwInvalidAlert;
var scwDateDisablingError;
var scwRangeDisablingError;
var scwNextActionReturn;
var scwNextAction;
var scwDateRange1Year;
var scwDateRange2Year;
var scwDateRange1Month;
var scwDateRange2Month;
var scwDateRange1Day;
var scwDateRange2Day;
var scwDateRange1; 
var scwDateRange2; 

/* iframe styles */
document.writeln('<style type="text/css">'
				+ '.scw {margin-left: -20px; margin-top: -85px; padding: 1px; vertical-align: middle;}'
				+ 'iframe.scw {position:absolute; z-index:'
				+ scwZindex
				+ ';top: 0px; left: 0px; visibility: hidden;'
				+ 'width: 1px; height: 1px;}'
				+ 'table.scw {padding:0px; visibility: hidden;'
				+ 'position: absolute; cursor: default;'
				+ 'width: 280px; top: 0px; left: 0px;'
				+ 'z-index:'
				+ (scwZindex+1)
				+ ';text-align:center;}'
				+ '</style>'); 
/* calendar styles */
document.writeln('<style type="text/css">'
				+ 'table.scw {padding: 1px; vertical-align: middle; border-top: #D2D4D3 1px solid; border-left: #D2D4D3 1px solid; border-bottom: #85898A 2px solid; border-right: #85898A 2px solid;}'
				+ 'td.scwDrag,'
				+ 'td.scwHead {padding: 0px; text-align: center;}'
				+ 'select.scwHead {margin: 3px 1px; text-align: left;}'
				+ 'input.scwHead {height: 26px; width: 22px; vertical-align: middle; text-align: center; margin: 0px; font: normal fixedSys;}'
				+ 'td.scwWeekNumberHead,'
				+ 'td.scwWeek {padding: 2px; text-align: left; font-weight: bold;}'
				+ 'td.scwFoot,'
				+ 'td.scwFootHover,'
				+ 'td.scwFoot:hover,'
				+ 'td.scwFootDisabled {padding: 0px; text-align: center; font-weight: normal;}'
				+ 'table.scwCells {text-align: right; width: 96%;}'
				+ 'td.scwCells,'
				+ 'td.scwCellsHover,'
				+ 'td.scwCells:hover,'
				+ 'td.scwCellsDisabled,'
				+ 'td.scwCellsExMonth,'
				+ 'td.scwCellsExMonthHover,'
				+ 'td.scwCellsExMonth:hover,'
				+ 'td.scwCellsExMonthDisabled,'
				+ 'td.scwCellsWeekend,'
				+ 'td.scwCellsWeekendHover,'
				+ 'td.scwCellsWeekend:hover,'
				+ 'td.scwCellsWeekendDisabled,'
				+ 'td.scwInputDate,'
				+ 'td.scwInputDateHover,'
				+ 'td.scwInputDate:hover,'
				+ 'td.scwInputDateDisabled,'
				+ 'td.scwWeekNo,'
				+ 'td.scwWeeks {padding: 2px; width: 30px; height: 16px; border: 0px; font-weight: normal; vertical-align: middle;}'
				+ '/* Blend the colours into your page here... */'
				+ '/* Calendar background */'
				+ 'table.scw {background-color:  #FFFFFF;}'
				+ '/* Drag Handle */'
				+ 'td.scwDrag {background-color: #9999CC; color: #CCCCFF;}'
				+ '/* Week number heading */'
				+ 'td.scwWeekNumberHead {color: #2D3437;}'
				+ '/* Week day headings */'
				+ 'td.scwWeek {color: #FFFFFF; background-color: #2D3437;}'
				+ '/* Week numbers */'
				+ 'td.scwWeekNo {background-color: #776677; color: #2D3437;}'
				+ '/* Enabled Days */'
				+ '/* Week Day */'
				+ 'td.scwCells {background-color: #EAEEEC; color: #2D3437;}'
				+ '/* Day matching the input date */'
				+ 'td.scwInputDate {background-color: #85898A; color: #FFFFFF;}'
				+ '/* Weekend Day */'
				+ 'td.scwCellsWeekend {background-color: #EAEEEC;color: #C01C16;}'
				+ '/* Day outside the current month */'
				+ 'td.scwCellsExMonth {background-color: #EAEEEC; color: #85898A;}'
				+ '/* Today selector */'
				+ 'td.scwFoot {background-color: #C01C16; border: 2px solid #CCCCCC; border-style: outset; color: #FFFFFF; font-weight: bold; text-dexoration:none; padding: 1px;}'
				+ '/* MouseOver/Hover formatting '
				+ '       If you want to "turn off" any of the formatting '
				+ '       then just set to the same as the standard format'
				+ '       above.' 
				+ ' '
				+ '       Note: The reason that the following are'
				+ '       implemented using both a class and a :hover'
				+ '       pseudoclass is because Opera handles the rendering'
				+ '       involved in the class swap very poorly and IE6 '
				+ '       (and below) only implements pseudoclasses on the'
				+ '       anchor tag.'
				+ '*/'
				+ '/* Active cells */'
				+ 'td.scwCells:hover,'
				+ 'td.scwCellsHover {background-color: #D2D4D3; cursor: pointer; cursor: hand; color: #FFFFFF;}'
				+ '/* Day matching the input date */'
				+ 'td.scwInputDate:hover,'
				+ 'td.scwInputDateHover {background-color: #D2D4D3; cursor: pointer; cursor: hand; color: #FFFFFF;}'
				+ '/* Weekend cells */'
				+ 'td.scwCellsWeekend:hover,'
				+ 'td.scwCellsWeekendHover {background-color: #D2D4D3; cursor: pointer; cursor: hand; color: #FFFFFF;}'
				+ '/* Day outside the current month */'
				+ 'td.scwCellsExMonth:hover,'
				+ 'td.scwCellsExMonthHover {background-color: #D2D4D3; cursor: pointer; cursor: hand; color: #FFFFFF;}'
				+ '/* Today selector */'
				+ 'td.scwFoot:hover,'
				+ 'td.scwFootHover {background-color: #C01C16; border: 2px solid #CCCCCC; border-style: outset; color: #FFFFFF; font-weight: bold; text-dexoration:none; padding: 1px;}'
				+ '/* Disabled cells */'
				+ '/* Week Day */'
				+ '/* Day matching the input date */'
				+ 'td.scwInputDateDisabled {background-color:  #FFFFFF; color: #D2D4D3;}'
				+ 'td.scwCellsDisabled {background-color: #FFFFFF; color: #D2D4D3;}'
				+ '/* Weekend Day */'
				+ 'td.scwCellsWeekendDisabled {background-color:  #FFFFFF; color: #D2D4D3;}'
				+ '/* Day outside the current month */'
				+ 'td.scwCellsExMonthDisabled {background-color: #FFFFFF; color: #D2D4D3;}'
				+ 'td.scwFootDisabled {background-color: #FFFFFF; color: #D2D4D3;}'
				+ '</style>');
				
// Overwrite this function for translations.
function scwSetDefaultLanguage() {
	scwToday 				= 'today';
	scwDrag 				= 'click here to drag';
	scwArrMonthNames 		= ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'Secember'];
	scwArrWeekInits			= ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
	scwInvalidDateMsg		= 'The entered date is invalid.\n';
	scwOutOfRangeMsg		= 'The entered date is out of range.';
	scwDoesNotExistMsg		= 'The entered date does not exist.';
	scwInvalidAlert			= ['Invalid date (',') ignored.'];
	scwDateDisablingError	= ['Error ',' is not a Date object.'];
	scwRangeDisablingError	= ['Error ',' should consist of two elements.'];

}

Date.prototype.scwFormat = function(scwFormat) {
	var charCount = 0;
	var codeChar = '';
	var result = '';
	for( var i=0;i<=scwFormat.length;i++) {
		if (i<scwFormat.length&&scwFormat.charAt(i)==codeChar) {
			charCount++;
		}
		else {
			switch (codeChar) {
				case 'y': 
				case 'Y':
					result += (this.getFullYear()%Math.pow(10,charCount)).toString().scwPadLeft(charCount);
					break;
				case 'm': 
				case 'M':
					result += (charCount<3)?(this.getMonth()+1).toString().scwPadLeft(charCount):scwArrMonthNames[this.getMonth()];
					break;
				case 'd': 
				case 'D':
					result += this.getDate().toString().scwPadLeft(charCount);
					break;
				default:
					while (charCount-->0) 
						result+=codeChar;
			}
			if (i<scwFormat.length) {
				codeChar = scwFormat.charAt(i)
				charCount = 1
			}
		}
	}
	return result;
}
 
String.prototype.scwPadLeft = function (padToLength) {
	var result = '';
	for (var i=0;i<(padToLength-this.length);i++) {
		result += '0';
	}
	return(result+this);
}

Function.prototype.runsAfterSCW = function() {
	var func = this;
	var args = new Array(arguments.length)
	for (var i=0;i<args.length;++i) {
		args[i]=arguments[i];
	}
	return function() {
		for(var i=0;i<arguments.length;++i) {
			args[args.length]=arguments[i];
		}
		return (args.shift() == scwTriggerEle)?func.apply(this,args):null;
	}
}

function scwID(id) {
	return document.getElementById(id);
}

function showCal (scwEle,scwSourceEle) {
	scwShow(scwEle,scwSourceEle);
}

function scwShow(scwEle,scwSourceEle) {
	scwTriggerEle = scwSourceEle;
	scwParmActiveToday=true;
	scwDateRange1Year			= getDateRange(1, 'year');
	scwDateRange2Year			= getDateRange(2, 'year');
	scwDateRange1Month			= getDateRange(1, 'month');
	scwDateRange2Month			= getDateRange(2, 'month');
	scwDateRange1Day			= getDateRange(1, 'day');
	scwDateRange2Day			= getDateRange(2, 'day');
	scwDropDownYears  			= getDateRange();
	scwDateRange1				= new Date(scwDateRange1Year, scwDateRange1Month - 1, scwDateRange1Day); 
	scwDateRange2				= new Date(scwDateRange2Year, scwDateRange2Month , scwDateRange2Day); 
	for(var i=0;i<7;i++) {
		scwPassEnabledDay[(i+7-scwWeekStart)%7] = true;
	for (var j=2;j<arguments.length;j++) {
		if (arguments[j]==i) {
			scwPassEnabledDay[(i+7-scwWeekStart)%7] = false;
			if(scwDateNow.getDay()==i) 
				scwParmActiveToday = false
			}
		}
	}
	scwSeedDate = scwDateNow
	if(typeof scwEle.value=='undefined') {
		var scwChildNodes = scwEle.childNodes
		for(var i=0;i<scwChildNodes.length;i++)
			if(scwChildNodes[i].nodeType==3) {
				var scwDateValue = scwChildNodes[i].nodeValue.replace(/^\s+/,'').replace(/\s+$/,'')
			if(scwDateValue.length>0) {
				scwTriggerEle.scwTextNode = scwChildNodes[i];
				scwTriggerEle.scwLength = scwChildNodes[i].nodeValue.length;
				break;
			}
		}
	}
	else 
		var scwDateValue = scwEle.value.replace(/^\s+/,'').replace(/\s+$/,'');
	scwSetDefaultLanguage();
	scwID('scwDragText').innerHTML = scwDrag;
	scwID('scwMonths').options.length = 0;
	for(var i=0;i<scwArrMonthNames.length;i++)
		scwID('scwMonths').options[i] = new Option(scwArrMonthNames[i],scwArrMonthNames[i]); 
	scwID('scwYears').options.length = 0;
	for(var i=0;i<scwDropDownYears;i++)
		scwID('scwYears').options[i] = new Option((scwBaseYear+i),(scwBaseYear+i));
	for(var i=0;i<scwArrWeekInits.length;i++)
		scwID('scwWeekInit'+i).innerHTML = scwArrWeekInits[(i+scwWeekStart)%scwArrWeekInits.length];
	if(scwID('scwFoot'))
		scwID('scwFoot').innerHTML = scwToday+ ' '+ scwDateNow.scwFormat(scwDateDisplayFormat);
	if(scwDateValue.length==0) {
		scwBlnFullInputDate=false
		if((new Date(scwBaseYear+scwDropDownYears,0,0))<scwSeedDate ||(new Date(scwBaseYear,0,1))>scwSeedDate) {
			scwSeedDate=new Date(scwBaseYear+
			Math.floor(scwDropDownYears/2),5,1);
		}
	}
	else {
		function scwInputFormat() {
			var scwArrSeed=new Array();
			var scwArrInput=scwDateValue.split(new RegExp('[\\'+scwArrDelimiters.join('\\')+']+','g'));
			if(scwArrInput[0]!=null) {
				if(scwArrInput[0].length==0)scwArrInput.splice(0,1)
					if(scwArrInput[scwArrInput.length-1].length==0)
						scwArrInput.splice(scwArrInput.length-1,1);
			}
			scwBlnFullInputDate = false;
			switch(scwArrInput.length) {
				case 1: {
					scwArrSeed[0]=parseInt(scwArrInput[0],10);
					scwArrSeed[1]='6';
					scwArrSeed[2]=1;
					break;
				}
				case 2: {
					scwArrSeed[0]=parseInt(scwArrInput[scwDateInputSequence.replace(/D/i,'').search(/Y/i)],10);
					scwArrSeed[1]=scwArrInput[scwDateInputSequence.replace(/D/i,'').search(/M/i)];
					scwArrSeed[2]=1;
					break;
				}
				case 3: {
					scwArrSeed[0]=parseInt(scwArrInput[scwDateInputSequence.search(/Y/i)],10);
					scwArrSeed[1]=scwArrInput[scwDateInputSequence.search(/M/i)];
					scwArrSeed[2]=parseInt(scwArrInput[scwDateInputSequence.search(/D/i)],10);
					scwBlnFullInputDate=true;
					break;
				}
				default: {
					scwArrSeed[0]=0;
					scwArrSeed[1]=0;
					scwArrSeed[2]=0;
				}
			}
			var scwExpValDay=new RegExp('^(0?[1-9]|[1-2][0-9]|3[0-1])$'), 
				scwExpValMonth=new RegExp('^(0?[1-9]|1[0-2]|'+ scwArrMonthNames.join('|')+')$','i'),
				scwExpValYear=new RegExp('^([0-9]{1,2}|[0-9]{4})$');
			if(scwExpValYear.exec(scwArrSeed[0])==null || scwExpValMonth.exec(scwArrSeed[1])==null || scwExpValDay.exec(scwArrSeed[2])==null) {
				if(scwShowInvalidDateMsg)
					alert(scwInvalidDateMsg+scwInvalidAlert[0]+scwDateValue+scwInvalidAlert[1]);
				scwBlnFullInputDate=false;
				scwArrSeed[0]=scwBaseYear+Math.floor(scwDropDownYears/2);
				scwArrSeed[1]='6';
				scwArrSeed[2]=1;
			}
			return scwArrSeed
		}
		scwArrSeedDate=scwInputFormat()
		if(scwArrSeedDate[0]<100)
			scwArrSeedDate[0]+=(scwArrSeedDate[0]>50)?1900:2000;
		if(scwArrSeedDate[1].search(/\d+/)!=0) {
			month=scwArrMonthNames.join('|').toUpperCase().search(scwArrSeedDate[1].substr(0,3).toUpperCase());
			scwArrSeedDate[1]=Math.floor(month/4)+1;
		}
		scwSeedDate=new Date(scwArrSeedDate[0], scwArrSeedDate[1]-1, scwArrSeedDate[2]);
	}
	if(isNaN(scwSeedDate)) {
		if(scwShowInvalidDateMsg)
			alert(scwInvalidDateMsg+scwInvalidAlert[0]+scwDateValue+scwInvalidAlert[1]);
		scwSeedDate=new Date(scwBaseYear+Math.floor(scwDropDownYears/2),5,1);
		scwBlnFullInputDate=false;
	}
	else {
		if((new Date(scwBaseYear,0,1))>scwSeedDate) {
			if(scwBlnStrict&&scwShowOutOfRangeMsg)
				alert(scwOutOfRangeMsg);
			scwSeedDate=new Date(scwBaseYear,0,1);
			scwBlnFullInputDate=false;
		}
		else {
			if((new Date(scwBaseYear+scwDropDownYears,0,0))<scwSeedDate) {
				if(scwBlnStrict&&scwShowOutOfRangeMsg)
					alert(scwOutOfRangeMsg);
				scwSeedDate=new Date(scwBaseYear+Math.floor(scwDropDownYears)-1,11,1);
				scwBlnFullInputDate=false;
			}
			else {
				if(scwBlnStrict && scwBlnFullInputDate && (scwSeedDate.getDate()!=scwArrSeedDate[2] || (scwSeedDate.getMonth()+1)!=scwArrSeedDate[1] || scwSeedDate.getFullYear()!=scwArrSeedDate[0])) {
					if(scwShowDoesNotExistMsg)alert(scwDoesNotExistMsg)
						scwSeedDate=new Date(scwSeedDate.getFullYear(),
									scwSeedDate.getMonth()-1,1);
					scwBlnFullInputDate=false;
				}
			}
		}
	}
	for(var i=0;i<scwDisabledDates.length;i++) {
		if(!((typeof scwDisabledDates[i]=='object')&&(scwDisabledDates[i].constructor==Date))) {
			if((typeof scwDisabledDates[i]=='object')&&(scwDisabledDates[i].constructor==Array)) {
				var scwPass=true;
				if(scwDisabledDates[i].length !=2) {
					if(scwShowRangeDisablingError)
						alert(scwRangeDisablingError[0]+scwDisabledDates[i]+scwRangeDisablingError[1]);
					scwPass=false;
				}
				else {
					for(var j=0;j<scwDisabledDates[i].length;j++) {
						if(!((typeof scwDisabledDates[i][j] =='object')&&(scwDisabledDates[i][j].constructor==Date))) {
							if(scwShowRangeDisablingError)
								alert(scwDateDisablingError[0]+scwDisabledDates[i][j]+scwDateDisablingError[1]);
							scwPass=false;
						}
					}
				}
				if(scwPass&&(scwDisabledDates[i][0]>scwDisabledDates[i][1])) {
					scwDisabledDates[i].reverse();
				}
			}
			else {
				if(scwShowRangeDisablingError)
					alert(scwDateDisablingError[0]+scwDisabledDates[i]+scwDateDisablingError[1]);
			}
		}
	}
	scwMonthSum=12*(scwSeedDate.getFullYear()-scwBaseYear)+scwSeedDate.getMonth();
	scwID('scwYears').options.selectedIndex=Math.floor(scwMonthSum/12);
	scwID('scwMonths').options.selectedIndex=(scwMonthSum%12);
	if(window.opera) { 
		scwID('scwMonths').style.display='none';
		scwID('scwMonths').style.display='block';
		scwID('scwYears').style.display='none';
		scwID('scwYears').style.display='block';
	}
	scwID('scwDrag').style.display=(scwAllowDrag)?((scwID('scwIFrame'))?'block':'table-row'):'none';
	scwShowMonth(0);
	scwTargetEle=scwEle;
	var offsetTop=parseInt(scwEle.offsetTop,10)+parseInt(scwEle.offsetHeight,10),
		offsetLeft=parseInt(scwEle.offsetLeft,10);
	if(!window.opera) {
		while(scwEle.tagName!='BODY'&&scwEle.tagName!='HTML') {
			offsetTop-=parseInt(scwEle.scrollTop,10)
			offsetLeft-=parseInt(scwEle.scrollLeft,10)
			scwEle=scwEle.parentNode
		}
		scwEle=scwTargetEle
	}
	do {
		scwEle=scwEle.offsetParent;
		offsetTop+=parseInt(scwEle.offsetTop,10);
		offsetLeft+=parseInt(scwEle.offsetLeft,10);
	}
	while (scwEle.tagName!='BODY'&&scwEle.tagName!='HTML')
		scwID('scw').style.top=offsetTop+'px';		
	scwID('scw').style.left=offsetLeft+'px';
	if(scwID('scwIframe')) {
		scwID('scwIframe').style.top=offsetTop+'px';
		scwID('scwIframe').style.left=offsetLeft+'px';
		scwID('scwIframe').style.width=(scwID('scw').offsetWidth-2)+'px';
		scwID('scwIframe').style.height=(scwID('scw').offsetHeight-2)+'px';
		scwID('scwIframe').style.visibility='visible';
	}
	scwID('scw').style.visibility='visible';
	scwID('scwYears').options.selectedIndex=scwID('scwYears').options.selectedIndex;
	scwID('scwMonths').options.selectedIndex=scwID('scwMonths').options.selectedIndex;
	var el=(scwSourceEle.parentNode)?scwSourceEle.parentNode:scwSourceEle;
	if(typeof event=='undefined') {
		el.addEventListener('click', scwStopPropagation, false)
	}
	else {
		if(el.attachEvent) {
			el.attachEvent('onclick',scwStopPropagation);
		}
		else {
			event.cancelBubble=true;
		}
	}
}
		
function scwHide() {
	scwID('scw').style.visibility='hidden';
	if(scwID('scwIframe')) { 
		scwID('scwIframe').style.visibility='hidden';
	}
	if(typeof scwNextAction!='undefined'&&scwNextAction!=null) {
		scwNextActionReturn=scwNextAction();
		scwNextAction=null;
	}
}

function scwCancel(scwEvt) {
	if(scwClickToHide)	
		scwHide();
	scwStopPropagation(scwEvt);
}

function scwStopPropagation(scwEvt) {
	if(scwEvt.stopPropagation)
		scwEvt.stopPropagation();
	else 
		scwEvt.cancelBubble=true;
}

function scwBeginDrag(event) {
	var elementToDrag=scwID('scw');
	var deltaX=event.clientX,
		deltaY=event.clientY,
		offsetEle=elementToDrag;
	do {
		deltaX-=parseInt(offsetEle.offsetLeft,10);
		deltaY-=parseInt(offsetEle.offsetTop,10);
		offsetEle=offsetEle.offsetParent;
	}
	while(offsetEle.tagName!='BODY'&&offsetEle.tagName!='HTML')
		if(document.addEventListener) {
			document.addEventListener('mousemove', moveHandler, true);
			document.addEventListener('mouseup', upHandler, true);
		}
		else {
			elementToDrag.attachEvent('onmousemove', moveHandler);
			elementToDrag.attachEvent('onmouseup', upHandler);
			elementToDrag.setCapture();
		}
	scwStopPropagation(event);
	function moveHandler(scwEvt) {
		if(!scwEvt)scwEvt=window.event
elementToDrag.style.left=(scwEvt.clientX-deltaX)+'px'
elementToDrag.style.top=(scwEvt.clientY-deltaY)+'px'
if(scwID('scwIframe'))
{scwID('scwIframe').style.left=
(scwEvt.clientX-deltaX)+'px'
scwID('scwIframe').style.top=
(scwEvt.clientY-deltaY)+'px'}
scwStopPropagation(scwEvt)}
	function upHandler(scwEvt) {
		if(!scwEvt)
			scwEvt=window.event;
		if(document.removeEventListener) {
			document.removeEventListener('mousemove', moveHandler, true);
			document.removeEventListener('mouseup',upHandler,true);
		}
		else {
			elementToDrag.detachEvent('onmouseup',upHandler);
			elementToDrag.detachEvent('onmousemove', moveHandler);
			elementToDrag.releaseCapture();
		}
		scwStopPropagation(scwEvt);
	}
}

function scwShowMonth(scwBias) {
	var scwShowDate=new Date(Date.parse(new Date().toDateString())), 
	scwStartDate=new Date();
	scwShowDate.setHours(12);
	scwSelYears=scwID('scwYears');
	scwSelMonths=scwID('scwMonths');
	if(scwSelYears.options.selectedIndex>-1) {
		scwMonthSum=12*(scwSelYears.options.selectedIndex)+scwBias;
		if(scwSelMonths.options.selectedIndex>-1) {
			scwMonthSum+=scwSelMonths.options.selectedIndex;
		}
	}
	else {
		if(scwSelMonths.options.selectedIndex>-1) {
			scwMonthSum+=scwSelMonths.options.selectedIndex;
		}
	}
	scwShowDate.setFullYear(scwBaseYear+Math.floor(scwMonthSum/12),(scwMonthSum%12),1);
	scwID('scwWeek_').style.display=(scwWeekNumberDisplay)?((scwID('scwIFrame'))?'block':'table-cell'):'none';
	if((12*parseInt((scwShowDate.getFullYear()-scwBaseYear),10))+parseInt(scwShowDate.getMonth(),10)<(12*scwDropDownYears)&&(12*parseInt((scwShowDate.getFullYear()-scwBaseYear),10))+parseInt(scwShowDate.getMonth(),10)>-1) {
		scwSelYears.options.selectedIndex=Math.floor(scwMonthSum/12);
		scwSelMonths.options.selectedIndex=(scwMonthSum%12);
		scwCurMonth=scwShowDate.getMonth();
		scwShowDate.setDate((((scwShowDate.getDay()-scwWeekStart)<0)?-6:1)+scwWeekStart-scwShowDate.getDay());
		var scwCompareDateValue=new Date(scwShowDate.getFullYear(),
		scwShowDate.getMonth(),
		scwShowDate.getDate()).valueOf();
		scwStartDate=new Date(scwShowDate);
		if(scwID('scwFoot')) {
			var scwFoot=scwID('scwFoot')
			function scwFootOutput(){
				scwSetOutput(scwDateNow);
			}
			if(scwDisabledDates.length==0) {
				if(scwActiveToday&&scwParmActiveToday) {
					scwFoot.onclick=scwFootOutput;
					scwFoot.className='scwFoot';
					if(scwID('scwIFrame')) {
						scwFoot.onmouseover=scwChangeClass;
						scwFoot.onmouseout=scwChangeClass;
					}
				}
				else {
					scwFoot.onclick=null;
					scwFoot.className='scwFootDisabled';
					if(scwID('scwIFrame')) {
						scwFoot.onmouseover=null;
						scwFoot.onmouseout=null;
					}
					if(document.addEventListener) {
						scwFoot.addEventListener('click', scwStopPropagation,false)
					}
					else{
						scwFoot.attachEvent('onclick', scwStopPropagation);
					}
				}
			}
			else {
				for(var k=0;k<scwDisabledDates.length;k++) {
					if(!scwActiveToday || !scwParmActiveToday || ((typeof scwDisabledDates[k]=='object')&&(((scwDisabledDates[k].constructor==Date)&&scwDateNow.valueOf()==scwDisabledDates[k].valueOf())||((scwDisabledDates[k].constructor==Array)&&scwDateNow.valueOf()>=scwDisabledDates[k][0].valueOf()&&scwDateNow.valueOf()<=scwDisabledDates[k][1].valueOf())))) {
						scwFoot.onclick=null;
						scwFoot.className='scwFootDisabled';
						if(scwID('scwIFrame')) {
							scwFoot.onmouseover=null;
							scwFoot.onmouseout=null;
						}
						if(document.addEventListener) {
							scwFoot.addEventListener('click', scwStopPropagation,false)
						}
						else {
							scwFoot.attachEvent('onclick',scwStopPropagation);
						}
						break;
					}
					else {
						scwFoot.onclick=scwFootOutput;
						scwFoot.className='scwFoot';
						if(scwID('scwIFrame')) {
							scwFoot.onmouseover=scwChangeClass,
							scwFoot.onmouseout=scwChangeClass;
						}
					}
				}
			}
		}

		function scwSetOutput(scwOutputDate) {
			if(typeof scwTargetEle.value=='undefined') {
				scwTriggerEle.scwTextNode.replaceData(0,scwTriggerEle.scwLength,scwOutputDate.scwFormat(scwDateOutputFormat));
			}
			else {
				scwTargetEle.value=scwOutputDate.scwFormat(scwDateOutputFormat);
			}
			scwHide();
		}

		function scwCellOutput(scwEvt) {
			var scwEle=scwEventTrigger(scwEvt),
				scwOutputDate=new Date(scwStartDate)
			if(scwEle.nodeType==3)
				scwEle=scwEle.parentNode;
				scwOutputDate.setDate(scwStartDate.getDate()+parseInt(scwEle.id.substr(8),10));
				scwSetOutput(scwOutputDate);
		}

		function scwChangeClass(scwEvt) {
			var scwEle=scwEventTrigger(scwEvt)
			if(scwEle.nodeType==3)
				scwEle=scwEle.parentNode;
			switch(scwEle.className) {
				case 'scwCells':
					scwEle.className='scwCellsHover';
					break;
				case 'scwCellsHover':
					scwEle.className='scwCells';
					break;
				case 'scwCellsExMonth':
					scwEle.className='scwCellsExMonthHover';
					break;
				case 'scwCellsExMonthHover':
					scwEle.className='scwCellsExMonth';
					break;
				case 'scwCellsWeekend':
					scwEle.className='scwCellsWeekendHover';
					break;
				case 'scwCellsWeekendHover':
					scwEle.className='scwCellsWeekend';
					break;
				case 'scwFoot':
					scwEle.className='scwFootHover';
					break;
				case 'scwFootHover':
					scwEle.className='scwFoot';
					break;
				case 'scwInputDate':
					scwEle.className='scwInputDateHover';
					break;
				case 'scwInputDateHover':
					scwEle.className='scwInputDate';
			}
			return true;
		}

		function scwEventTrigger(scwEvt) {
			if(!scwEvt)
				scwEvt=event;
			return scwEvt.target||scwEvt.srcElement
		}

		function scwWeekNumber(scwInDate) {
			var scwInDateWeekBase=new Date(scwInDate);
			scwInDateWeekBase.setDate(scwInDateWeekBase.getDate()-scwInDateWeekBase.getDay()+scwWeekNumberBaseDay+((scwInDate.getDay()>scwWeekNumberBaseDay)?7:0))
			var scwFirstBaseDay=new Date(scwInDateWeekBase.getFullYear(),0,1);
			scwFirstBaseDay.setDate(scwFirstBaseDay.getDate()-scwFirstBaseDay.getDay()+scwWeekNumberBaseDay);
			if(scwFirstBaseDay<new Date(scwInDateWeekBase.getFullYear(),0,1)) {
				scwFirstBaseDay.setDate(scwFirstBaseDay.getDate()+7);
			}
			var scwStartWeekOne=new Date(scwFirstBaseDay-scwWeekNumberBaseDay+scwInDate.getDay());
			if(scwStartWeekOne>scwFirstBaseDay) {
				scwStartWeekOne.setDate(scwStartWeekOne.getDate()-7);
			}
			var scwWeekNo='0'+(Math.round((scwInDateWeekBase-scwFirstBaseDay)/604800000,0)+1);
			return scwWeekNo.substring(scwWeekNo.length-2,scwWeekNo.length)
		}
		
		var scwCells=scwID('scwCells');
		for(i=0;i<scwCells.childNodes.length;i++) {
			var scwRows=scwCells.childNodes[i];
			if(scwRows.nodeType==1&&scwRows.tagName=='TR') {
				if(scwWeekNumberDisplay) {
					scwTmpEl=scwRows.childNodes[0];
					scwTmpEl.innerHTML=scwWeekNumber(scwShowDate);
					scwTmpEl.style.borderColor=(scwTmpEl.currentStyle)?scwTmpEl.currentStyle['backgroundColor']:(window.getComputedStyle)?document.defaultView.getComputedStyle(scwTmpEl,null).getPropertyValue('background-color'):'';
					scwTmpEl.style.display='';
				}
				else {
					scwRows.childNodes[0].style.display='none';
				}
				for(j=1;j<scwRows.childNodes.length;j++) {
					var scwCols=scwRows.childNodes[j]
					if(scwCols.nodeType==1&&scwCols.tagName=='TD') {
						scwRows.childNodes[j].innerHTML=scwShowDate.getDate();
						var scwCell=scwRows.childNodes[j],
							scwDisabled=((scwOutOfRangeDisable&&(scwShowDate<(new Date(scwBaseYear,0,1,scwShowDate.getHours())) || scwShowDate>(new Date(scwBaseYear+scwDropDownYears,0,0,scwShowDate.getHours()))))||(scwOutOfMonthDisable&&(scwShowDate<(new Date(scwShowDate.getFullYear(),scwCurMonth,1,scwShowDate.getHours())) || scwShowDate>(new Date(scwShowDate.getFullYear(),scwCurMonth+1,0,scwShowDate.getHours())))) || 
										scwShowDate<scwDateRange1 || scwShowDate>scwDateRange2)?true:false;
						scwCell.style.visibility=(scwOutOfMonthHide&&(scwShowDate<(new Date(scwShowDate.getFullYear(),scwCurMonth,1,scwShowDate.getHours()))||scwShowDate>(new Date(scwShowDate.getFullYear(),scwCurMonth+1,0,scwShowDate.getHours()))))?'hidden':'';
						for(var k=0;k<scwDisabledDates.length;k++) {
							if((typeof scwDisabledDates[k]=='object')&&(scwDisabledDates[k].constructor==Date)&&scwCompareDateValue==scwDisabledDates[k].valueOf()) {
								scwDisabled=true;
							}
							else {
								if((typeof scwDisabledDates[k]=='object')&&(scwDisabledDates[k].constructor==Array)&&scwCompareDateValue>=scwDisabledDates[k][0].valueOf()&&scwCompareDateValue<=scwDisabledDates[k][1].valueOf()) {
									scwDisabled=true;
								}
							}
						}
						if(scwDisabled || !scwEnabledDay[j-1+(7*((i*scwCells.childNodes.length)/6))] || !scwPassEnabledDay[(j-1+(7*(i*scwCells.childNodes.length/6)))%7]) {
							scwRows.childNodes[j].onclick=null;
							if(scwID('scwIFrame')) {
								scwRows.childNodes[j].onmouseover=null;
								scwRows.childNodes[j].onmouseout=null;
							}
							scwCell.className=(scwShowDate.getMonth()!=scwCurMonth)?'scwCellsExMonthDisabled':(scwBlnFullInputDate&&scwShowDate.toDateString()==scwSeedDate.toDateString())?'scwInputDateDisabled':(scwShowDate.getDay()%6==0)?'scwCellsWeekendDisabled':'scwCellsDisabled';
							scwCell.style.borderColor=(scwFormatTodayCell&&scwShowDate.toDateString()==scwDateNow.toDateString())?scwTodayCellBorderColour:(scwCell.currentStyle)?scwCell.currentStyle['backgroundColor']:(window.getComputedStyle)?document.defaultView.getComputedStyle(scwCell,null).getPropertyValue('background-color'):'';
						}
						else {
							scwRows.childNodes[j].onclick=scwCellOutput;
							if(scwID('scwIFrame')) {
								scwRows.childNodes[j].onmouseover=scwChangeClass;
								scwRows.childNodes[j].onmouseout=scwChangeClass;
							}
							scwCell.className=(scwShowDate.getMonth()!=scwCurMonth)?'scwCellsExMonth':(scwBlnFullInputDate&&scwShowDate.toDateString()==scwSeedDate.toDateString())?'scwInputDate':(scwShowDate.getDay() == scwWeekendDay1 || scwShowDate.getDay() == scwWeekendDay2)?'scwCellsWeekend':'scwCells';
							scwCell.style.borderColor=(scwFormatTodayCell&&scwShowDate.toDateString()==scwDateNow.toDateString())?scwTodayCellBorderColour:(scwCell.currentStyle)?scwCell.currentStyle['backgroundColor']:(window.getComputedStyle)?document.defaultView.getComputedStyle(scwCell,null).getPropertyValue('background-color'):'';
						}
						scwShowDate.setDate(scwShowDate.getDate()+1);
						scwCompareDateValue=new Date(scwShowDate.getFullYear(),scwShowDate.getMonth(),scwShowDate.getDate()).valueOf()
					}
				}
			}
		}
	}
	scwID('scw').style.visibility='hidden';
	scwID('scw').style.visibility='visible';
}

document.write("<!--[if IE]>"+
"<iframe class='scw' src='scwblank.html' "+
"id='scwIframe' name='scwIframe' "+
"frameborder='0'>"+
"</iframe>"+
"<![endif]-->"+
"<table id='scw' class='scw'>"+
"<tr class='scw'>"+
"<td class='scw'>"+
"<table class='scwHead' id='scwHead' width='100%' "+
"cellspacing='0' cellpadding='0'>"+
"<tr id='scwDrag' style='display:none;'>"+
"<td colspan='4' class='scwDrag' "+
"onmousedown='scwBeginDrag(event);'>"+
"<div id='scwDragText'></div>"+
"</td>"+
"</tr>"+
"<tr class='scwHead' >"+
"<td class='scwHead'>"+
"<input class='scwHead' id='scwHeadLeft' type='button' value='<' "+
"onclick='scwShowMonth(-1);'  /></td>"+
"<td class='scwHead'>"+
"<select id='scwMonths' class='scwHead' "+
"onchange='scwShowMonth(0);'>"+
"</select>"+
"</td>"+
"<td class='scwHead'>"+
"<select id='scwYears' class='scwHead' "+
"onchange='scwShowMonth(0);'>"+
"</select>"+
"</td>"+
"<td class='scwHead'>"+
"<input class='scwHead' id='scwHeadRight' type='button' value='>' "+
"onclick='scwShowMonth(1);' /></td>"+
"</tr>"+
"</table>"+
"</td>"+
"</tr>"+
"<tr class='scw'>"+
"<td class='scw'>"+
"<table class='scwCells' align='center' cellspacing='1'>"+
"<thead>"+
"<tr><td class='scwWeekNumberHead' id='scwWeek_' ></td>");

for(i=0;i<7;i++)
	document.write("<td class='scwWeek' id='scwWeekInit"+i+"'></td>");
document.write("</tr>"+"</thead>"+"<tbody id='scwCells' "+"onClick='scwStopPropagation(event);'>");

for(i=0;i<6;i++) {
	document.write("<tr>"+"<td class='scwWeekNo' id='scwWeek_"+i+"'></td>");
	for(j=0;j<7;j++) {
		document.write("<td class='scwCells' id='scwCell_"+(j+(i*7))+"'></td>");
	}
	document.write("</tr>");
}
document.write("</tbody>");

if((new Date(scwBaseYear+scwDropDownYears,0,0))>scwDateNow&&(new Date(scwBaseYear,0,0))<scwDateNow) {
	document.write("<tfoot class='scwFoot'>"+
	"<tr class='scwFoot'>"+
	"<td class='scwFoot' id='scwFoot' colspan='8'>"+
	"</td>"+
	"</tr>"+
	"</tfoot>");
}

document.write("</table>"+
"</td>"+
"</tr>"+
"</table>");

if(document.addEventListener){
	scwID('scw').addEventListener('click',scwCancel,false);
	scwID('scwHeadLeft').addEventListener('click',scwStopPropagation,false);
	scwID('scwMonths').addEventListener('click',scwStopPropagation,false);
	scwID('scwMonths').addEventListener('change',scwStopPropagation,false);
	scwID('scwYears').addEventListener('click',scwStopPropagation,false);
	scwID('scwYears').addEventListener('change',scwStopPropagation,false);
	scwID('scwHeadRight').addEventListener('click',scwStopPropagation,false);
}
else {
	scwID('scw').attachEvent('onclick',scwCancel);
	scwID('scwHeadLeft').attachEvent('onclick',scwStopPropagation);
	scwID('scwMonths').attachEvent('onclick',scwStopPropagation);
	scwID('scwMonths').attachEvent('onchange',scwStopPropagation);
	scwID('scwYears').attachEvent('onclick',scwStopPropagation);
	scwID('scwYears').attachEvent('onchange',scwStopPropagation);
	scwID('scwHeadRight').attachEvent('onclick',scwStopPropagation);
}

if(document.addEventListener) {
	document.addEventListener('click',scwHide,false);
}
else {
	document.attachEvent('onclick',scwHide);
}



// *******************************************************************
// Jouney planner functionality for calendar.
// *******************************************************************

// ==================================================================
// This function overwrites the calendar dictionary.
// ==================================================================

function scwSetDefaultLanguage() {
	scwToday 		= calendarToday;
	scwDrag 		= calendarDrag;
	scwArrMonthNames 	= [january, february, march, april, may, june, july, august, september, october, november, december];
	scwArrWeekInits		= [sunday, monday, tuesday, wednesday, thursday, friday, saturday];
	scwInvalidDateMsg	= calendarInvalidDate + '\n';
	scwOutOfRangeMsg	= calendarDateOutOfRange;
	scwDoesNotExistMsg	= calendarNonExistingDate;
	scwInvalidAlert		= [calendarDateIgnored1, calendarDateIgnored2];
	scwDateDisablingError	= [calendarError, calendarDateObject];
	scwRangeDisablingError	= [calendarError, calendarTwoElements];
}

// ==================================================================
// This function sets the date range of the calendar. Dates out of range
// are displayed but deactivated.
// ==================================================================

function getDateRange (range, type) {
	if (range == 1) {
		if (type == 'year') 
			return document.getElementById('dateYearMonth').options[0].value.substr(0,4);
		if (type == 'month')
			return document.getElementById('dateYearMonth').options[0].value.substr(4,2);
		else
			return 1; 
	}
	else if (range == 2) {
		var optionsLength = document.getElementById('dateYearMonth').options.length - 1;
		if (type == 'year') 
			return document.getElementById('dateYearMonth').options[optionsLength].value.substr(0,4);
		if (type == 'month') 
			return document.getElementById('dateYearMonth').options[optionsLength].value.substr(4,2);
		else 
			return 1; 
	}
	else // number of years in calendar select box
		return parseInt(document.getElementById('dateYearMonth').options[document.getElementById('dateYearMonth').options.length - 1].value.substr(0,4)) - parseInt(document.getElementById('dateYearMonth').options[0].value.substr(0,4)) + 1;
}


// ==================================================================
// This function sets the date in the correct format for the 
// calendar.
// ==================================================================

function setCalendarDate () {
	var date1 = document.getElementById('dateYearMonth').value.substr(0,4);
	var date2 = document.getElementById('dateYearMonth').value.substr(4,2);
	document.getElementById('calendarDate').innerHTML = document.getElementById('dateDay').value + '.' + date2 + '.' + date1;
}

// ==================================================================
// This function enters the date in the date input fields after
// using the calendar.
// ==================================================================

function getCalendarDate () {
	var date = document.getElementById('calendarDate').innerHTML.split('.');
	// day (add leading zero if necessary)
	for (var i=0; i < document.getElementById('dateDay').options.length; i++) {
		if (document.getElementById('dateDay').options[i].value == date[0]) { 
			document.getElementById('dateDay').options[i].selected = true; 
		}
	}
	// year and month
	for (var i=0; i < document.getElementById('dateYearMonth').options.length; i++) {
		if (document.getElementById('dateYearMonth').options[i].value == date[2] + date[1]) {
			document.getElementById('dateYearMonth').options[i].selected = true;
		}
	}	
}

