﻿
function addzero(value) {
  while( value.length<2 ) value = String("0") + value;
  return value;
}

function checkDateOrder(frm, ci_day, ci_month_year, co_day, co_month_year) {
	if (document.getElementById) {
		var frm = document.getElementById(frm);
		var my = frm[ci_month_year].value.split("-");
	    var ci = new Date (my[0], my[1]-1, frm[ci_day].value, 12, 0, 0, 0);
	    my = frm[co_month_year].value.split("-");
	    var co = new Date (my[0], my[1]-1, frm[co_day].value, 12, 0, 0, 0);
	    if (ci >= co){
    	    co.setTime(ci.getTime() + 1000 * 60 * 60 * 24);
	        frm[co_day].value =  co.getDate();
    	    var com = co.getMonth()+1;
	        frm[co_month_year].value = co.getFullYear() + "-" + com;
    	}
	}
}

function addzero_top(value) {
	while( value.length<2 ) value = String("0") + value;
	return value;
}

function checkDateOrder_top(frm, ci_day, ci_month_year, co_day, co_month_year) {
	if (document.getElementById) {
		var frm = document.getElementById(frm);
		var my = frm[ci_month_year].value.split("-");
		var ci = new Date (my[0], my[1]-1, frm[ci_day].value, 12, 0, 0, 0);
		my = frm[co_month_year].value.split("-");
		var co = new Date (my[0], my[1]-1, frm[co_day].value, 12, 0, 0, 0);
		if (ci >= co){
			co.setTime(ci.getTime() + 1000 * 60 * 60 * 24);
			frm[co_day].value =  co.getDate();
			var com = co.getMonth()+1;
			frm[co_month_year].value = co.getFullYear() + "-" + com;
		}
	}
}
	
function tickCheckBox(el) {
	if (document.getElementById) {
		if (document.getElementById(el)) {
			document.getElementById(el).checked = false;
		}
	}
	return true;
}

function checkDateOrder(me, ci_day, ci_month_year, co_day, co_month_year) {
	var
		frm = document.getElementById('frm'),
		my,
		ci = new Date( 0 ),
		co = new Date( 0 ),
		com,
		today = new Date();

	if ( frm[ci_day].value !== '0' )
	{
		ci.setDate( frm[ci_day].value );
	}
	if ( frm[ci_month_year].value !== '0' )
	{
		my = frm[ci_month_year].value.split( "-" );
		ci.setFullYear( my[0] );
		ci.setMonth( my[1] - 1 );
	}
	ci.setHours( 12 );
	ci.setMinutes( 0 );
	ci.setSeconds( 0 );
	// create date object from checkout values
	if ( frm[co_day].value !== '0' )
	{
		co.setDate( frm[co_day].value );
	}
	if ( frm[co_month_year].value !== '0' )
	{
		my = frm[co_month_year].value.split( "-" );
		co.setFullYear( my[0] );
		co.setMonth( my[1] - 1 );
	}
	co.setHours( 12 );
	co.setMinutes( 0 );
	co.setSeconds( 0 );
	if ( frm[ci_month_year].value !== '0' )
	{
		while ( ci.getMonth() != frm[ci_month_year].value.split( "-" )[1] - 1 )
		{
			ci.setDate( ci.getDate() - 1 );
			frm[ci_day].value = ci.getDate();
		}
		var cim = ci.getMonth() + 1;
		frm[ci_month_year].value = ci.getFullYear() + "-" + cim;
	}
	if ( ci >= co )
	{
		co.setTime( ci.getTime() + Date.prototype.MILLISECONDS_PER_DAY );
		com = co.getMonth() + 1;
		if ( frm[ci_day].value !== '0' )
		{
			frm[co_day].value = co.getDate();
		}
		if ( frm[ci_month_year].value !== '0' )
		{
			frm[co_month_year].value = co.getFullYear() + "-" + com;
		}
	}
}

function updateDaySelect( me )
{
	// 1-2 testing
	if ( !days3 )
	{
		return;
	}
	var frm = document.getElementById('frm');
	if ( frm.getAttribute( 'id' ) !== 'frm' && frm.className !== 'availForm' )
	{
		return;
	}
	if ( !frm.checkin_monthday || !frm.checkout_monthday || !frm.checkin_year_month || !frm.checkout_year_month )
	{
		return;
	}
	if ( frm.checkin_monthday.value === '0' && frm.checkout_monthday.value === '0' && frm.checkin_year_month.value === '0' && frm.checkout_year_month.value === '0' )
	{
		return;
	}
	var
		ci_d = frm.checkin_monthday,
		co_d = frm.checkout_monthday,
		ci_my,
		co_my,
		todaysDate;
	// If the form field has a nonzero value, use it;
	if ( frm.checkin_year_month.value !== '0' )
	{
		ci_my = frm.checkin_year_month.value.split( "-" );
	}
	else
	{
		// Use the current date value.
		todaysDate = new Date();
		ci_my = [ todaysDate.getFullYear(), todaysDate.getTwoDigitMonth() ];
	}
	if ( frm.checkout_year_month.value !== '0' )
	{
		co_my = frm.checkout_year_month.value.split( "-" );
	}
	else
	{
		todaysDate = new Date();
		co_my = [ todaysDate.getFullYear(), todaysDate.getTwoDigitMonth() ];
	}
	var
		ci_sel = Math.max( ci_d.selectedIndex, 0 ),
		co_sel = Math.max( co_d.selectedIndex, 0 ),
		ci_sel_value = ci_d[ ci_sel ].value,
		co_sel_value = co_d[ co_sel ].value,
		monthDays = [],
		opt,
		i;

	ci_d.innerHTML = '';
	co_d.innerHTML = '';

	var MonthdayPromptOption = function ()
	{
		this.option = {
			"_this" : this,
			"@selected" : "selected",
			"@class" : "day prompt site_experiment_encourage_date_entry_2",
			"@value" : 0,
			"#text" : "jour"
		};
	};
	if ( ci_sel_value === '0' )
	{
		buildHtmlNode( new MonthdayPromptOption(), ci_d ).selected = true;
	}
	if ( co_sel_value === '0' )
	{
		buildHtmlNode( new MonthdayPromptOption(), co_d ).selected = true;
	}

	function writeMonthdaysOptions( numberOfMonthdaysToShow, yearMonthSelectElement, monthDaysArray, monthDaysSelectElement, monthDaySelectValue )
	{
		var i, optionElementInnerHTML, optionElement;
		for ( i = 0; i < numberOfMonthdaysToShow; i++ )
		{
			optionElement = document.createElement( 'option' );
			optionElementInnerHTML = i + 1;
			if ( yearMonthSelectElement.value !== '0' )
			{
				optionElementInnerHTML = monthDaysArray[i] + ' ' + optionElementInnerHTML;
			}
			optionElement.innerHTML = optionElementInnerHTML;
			optionElement.value = ( i + 1 );
			if ( i > 0 && monthDaySelectValue == i + 1 )
			{
				optionElement.defaultSelected = optionElement.selected = true;
			}
			monthDaysSelectElement.appendChild( optionElement );
		}
	}
	// Check-in month
	monthDays = buildDaysForMonth( ci_my[0], ci_my[1] );
	var numberOfMonthdaysToShow = 31;
	if ( frm.checkin_year_month.value !== '0' )
	{
		numberOfMonthdaysToShow = monthDays.length;
	}
	writeMonthdaysOptions( numberOfMonthdaysToShow, frm.checkin_year_month, monthDays, ci_d, ci_sel_value );
	// Checkout month
	monthDays = buildDaysForMonth( co_my[0], co_my[1] );
	numberOfMonthdaysToShow = 31;
	if ( frm.checkout_year_month.value !== '0' )
	{
		numberOfMonthdaysToShow = monthDays.length;
	}
	writeMonthdaysOptions( numberOfMonthdaysToShow, frm.checkout_year_month, monthDays, co_d, co_sel_value );
	// IE 6 exhibits a bug whereby the value of the monthday select always jumps to zero.
	if ( document.all && /MSIE 6\.0/.test(navigator.appVersion) )
	{
		ci_d.value = ci_sel_value;
		co_d.value = co_sel_value;
	}
}

function buildDaysForMonth( year, month )
{
	// Month index starts on 0(-11) in Date()-object
	var monthDate = new Date( year, month - 1 );
	var orgMonth = monthDate.getMonth();
	var dayArray = [], weekDay;
	while ( monthDate.getMonth() == orgMonth )
	{
		// Week starts on Sunday in Date()-object
		weekDay = ( monthDate.getDay() == 0 ) ? 6 : ( monthDate.getDay() - 1 );
		dayArray.push( days3[weekDay] );
		monthDate.setDate( monthDate.getDate() + 1 );
	}
	return dayArray;
}

function buildHtmlNode (elementsObject, targetNode, refChild)
{
	var
		key,
		counter,
		found,
		newElement,
		newNode;
	for (key in elementsObject)
	{
		if (elementsObject.hasOwnProperty(key))
		{
			var
				prefix = key.substring(0, 1),
				primaryKey = key.substring(1);
			if (prefix != '_') // Were on a non-DOM key, so skip.
			{
				if (prefix == '@') // Attribute
				{
					if (!targetNode.getAttribute(primaryKey))
					{
						// Perhaps extend this in the future to support multiple class values.
						targetNode.setAttribute(primaryKey, elementsObject[key]);
					}
				}
				else
				{
					if (prefix == '#') // Text or CDATA
					{
						if (primaryKey == 'text') // Text
						{
							found = false;
							if (targetNode.childNodes && targetNode.childNodes.length > 0)
							{
								// Traverse text node children and append only if it isnt already there.
								counter = 0;
								while (counter < targetNode.childNodes.length && !found)
								{
									if (targetNode.childNodes[counter].nodeType == Node.TEXT_NODE && targetNode.childNodes[counter].nodeValue == elementsObject[key])
									{
										found = true;
									}
									counter++;
								}
							}
							if (!found)
							{
								// MGP 040209: Cope with strings split by linebreaks - need to insert <br> elements
								if ( elementsObject[key].indexOf("\n") == -1 )
								{
									newNode = document.createTextNode(elementsObject[key]);
									if (refChild)
									{
										targetNode.insertBefore(newNode, refChild);
									}
									else
									{
										targetNode.appendChild(newNode);
									}
								}
								else
								{
									// Found some linebreaks - split the string into component parts
									var newNodeParts = elementsObject[key].split("\n");
									// Loop through the parts, adding a linebreak after each one (except the last one)
									for ( var i = 0; i < newNodeParts.length; i++ )
									{
										// Check for the existence of a star rating in the text node
										if ( newNodeParts[i].match(/\d\*$/) )
										{
											// Found a star rating - extract the star
											lastSpace = newNodeParts[i].lastIndexOf(" ");
											newNodeString = newNodeParts[i].substring( 0, lastSpace );
											starImgSrc = '/static/img/icons/stars/' + newNodeParts[i].substr( lastSpace + 1, 1 ) + 'sterren-small.png';
										}
										else
										{
											newNodeString = newNodeParts[i];
											starImgSrc = '';
										}
										newNode = document.createTextNode(newNodeString);
										if (refChild)
										{
											targetNode.insertBefore(newNode, refChild);
											if ( starImgSrc )
											{
												newImg = document.createElement('img');
												newImg.setAttribute('src', starImgSrc);
												newImg.className = "stars";
												targetNode.insertBefore(newImg, refChild);
											}
										}
										else
										{
											targetNode.appendChild(newNode);
											if ( starImgSrc )
											{
												newImg = document.createElement('img');
												newImg.setAttribute('src', starImgSrc);
												newImg.className = "stars";
												targetNode.appendChild(newImg);
											}
										}
										if ( i < newNodeParts.length - 1)
										{
											// Add a <br>
											newBR = document.createElement("br");
											if (refChild)
											{
												targetNode.insertBefore(newBR, refChild);
											}
											else
											{
												targetNode.appendChild(newBR);
											}
										}
									}
								}
							}
						}
						else
						{
							if (primaryKey == 'cdata') // CDATA
							{
								targetNode.appendChild(document.createCDATASection(elementsObject[key]));
							}
						}
					}
					else // Element
					{
						// If targetNode was passed into this function, append the new child to it
						if (targetNode)
						{
							// If elementsObject[key] is an array, we l create an element of type key for each array member.
							if (elementsObject[key].length > 0)
							{
								for (counter = 0; counter < elementsObject[key].length; counter++)
								{
									if (elementsObject[key][counter])
									{
										if (!elementsObject[key][counter]._node)
										{
											newElement = document.createElement(key);
											elementsObject[key][counter]._node = newElement;
											var r = counter + 1;
											while (r < elementsObject[key].length && !refChild)
											{
												if (elementsObject[key][r])
												{
													refChild = elementsObject[key][r]._node;
												}
												r++;
											}
											if (refChild)
											{
												newNode = targetNode.insertBefore(
													elementsObject[key][counter]._node,
													refChild);
											}
											else
											{
												newNode = targetNode.appendChild(
													elementsObject[key][counter]._node);
											}
											arguments.callee(
												elementsObject[key][counter],
												newNode);
											newElement._elementTree = elementsObject[key][counter];
										}
										else
										{
											arguments.callee(
												elementsObject[key][counter],
												elementsObject[key][counter]._node);
										}
									}
								}
							}
							else
							{
								if (elementsObject[key].length !== 0)
								{
									if (!elementsObject[key]._node)
									{
										newElement = document.createElement(key);
										elementsObject[key]._node = newElement;
										if (refChild)
										{
											newNode = targetNode.insertBefore(
												elementsObject[key]._node,
												refChild);
										}
										else
										{
											newNode = targetNode.appendChild(
												elementsObject[key]._node);
										}
										arguments.callee(
											elementsObject[key],
											newNode);
										newElement._elementTree = elementsObject;
									}
									else
									{
										arguments.callee(
											elementsObject[key],
											elementsObject[key]._node);
									}
								}
							}
						}
						// else create the new element as targetNode.
						else
						{
							if (!elementsObject[key]._node)
							{
								arguments.callee(elementsObject[key],
									elementsObject[key]._node = targetNode = document.createElement(key));
							}
							else
							{
								arguments.callee(elementsObject[key],
									elementsObject[key]._node);
							}
						}
					}
				}
			}
		}
	}
	return targetNode;
};



function buildCal( y, m, d )
{
	var daysInMonth = [31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	// Create today's date.
	td = new Date();
	if ( !y )
	{
		y = td.getFullYear();
	}
	if ( !m )
	{
		m = td.getMonth() + 1;
	}
	if ( !d )
	{
		d = td.getDate;
	}
	var dt = calendar.caldt;
	var mDate = new Date( y, m - 1, 1 );
	var firstMonthDay = mDate.getDay();
	daysInMonth[1] = ( ( ( mDate.getFullYear() % 100 != 0 ) && ( mDate.getFullYear() % 4 == 0 ) ) || ( mDate.getFullYear() % 400 == 0 ) ) ? 29 : 28;
	var t = '<table class="caltable" cellspacing="0"><tr>';
	t += '<td class="calheader" colspan="7" class="monthYear">';
	if ( y == td.getFullYear() && m == td.getMonth() + 1 )
	{
		t += '<img class="calNoPrevMonth" src="' + tr.icons + '/transparent.png" width="24" height="24" alt="' + tr.prevMonth + '" />';
	}
	else
	{
		t += '<a class="calPrevMonth" href="" onclick="prevMonth( ' + y + ',' + m + ' ); return false;" title="' + tr.prevMonth + '"><img src="' + tr.icons + '/transparent.png" width="24" height="24" alt="' + tr.prevMonth + '" /></a>';
	}
	t += '&nbsp;<select name="ym" onchange="goYearMonth( this.options[this.selectedIndex].value );">';
	var mn = td.getMonth() + 1;
	var yr = td.getFullYear();
	var last_month = 0;
	for ( n = 0; n <= 11; n++ )
	{
		t += '<option value="' + yr + '-' + mn + '"';
		if ( mn == m && yr == y )
		{
			t += ' selected="selected"';
			last_month = 1;
		}
		else
		{
			last_month = 0;
		}
		t += '>' + months[mn - 1] + ' ' + yr +'</option>';
		mn++;
		if ( mn > 12 )
		{
			mn = 1;
			yr++;
		}
	}
	t += ' </select>&nbsp;';
	if ( last_month == 1 )
	{
		t += '<img class="calNoNextMonth" src="' + tr.icons + '/transparent.png" width="24" height="24" alt="' + tr.nextMonth + '" />';
	}
	else
	{
		t += '<a class="calNextMonth" href="" onclick="nextMonth( ' + y + ',' + m + ' ); return false;" title="' + tr.nextMonth +'"><img src="' + tr.icons + '/transparent.png" width="24" height="24" alt="' + tr.nextMonth + '" /></a>';
	}
	t += '</td></tr>';
	t += '<tr class="dayNames">';
	var cl;
	for ( dn = 0; dn < 7; dn++ )
	{
		cl = '';
		if ( ( dn % 7 == 5 ) || ( dn % 7 == 6 ) )
		{
			cl += ' weekend';
		}
		t += '<td class="' + cl + '">' + days[dn] + '</td>';
	}
	t += '</tr><tr class="days">';
	for ( i = 1; i <= 42; i++ )
	{
		var x = i - ( firstMonthDay + 6 ) % 7;
		if ( x > daysInMonth[m - 1] || x < 1 )
		{
			x = '&nbsp;';
		}
		cl = '';
		var href = 0;
		if ( ( i % 7 == 0 ) || ( i % 7 == 6 ) )
		{
			cl += ' weekend';
		}
		if ( x > 0 )
		{
			var xDay = new Date( y, m - 1, x );
			if ( ( xDay.getFullYear() == y ) && ( xDay.getMonth() + 1 == m ) && ( xDay.getDate() == d ) )
			{
				cl += ' selected';
				href = 1;
			}
			if ( ( xDay.getFullYear() == td.getFullYear() ) && ( xDay.getMonth() == td.getMonth() ) && ( xDay.getDate() == td.getDate() ) )
			{
				cl += ' today';
				href = 1;
			}
			else
			{
				if ( xDay > td )
				{
					cl += ' future';
					href = 1;
				}
				else
				{
					if ( xDay < td )
					{
						cl += ' past';
					}
				}
			}
		}
		t += '<td class="' + cl + '">';
		if ( href )
		{
			t += '<a href="#" onclick="pickDate( ' + y + ',' + m + ',' + x + ',\'' + dt + '\' ); return false;">' + x + '</a>';
		}
		else
		{
			t += x;
		}
		t += '</td>';
		if ( ( ( i ) % 7 == 0 ) && ( i < 36 ) )
		{
			t += '</tr><tr class="days">';
		}
	}
	t += '</tr><tr><td colspan="7"><a href="#" onclick="closeCal(); return false;">' + tr.closeCalendar + '</a></td></tr></table>';
	document.getElementById( "calendar" ).innerHTML = t;
}

function showCalendar( me, calId, dt )
{
	getDimensions( me );
	if ( document.getElementById )
	{
		var c = document.getElementById( calId );
		var i = getChildImage( me );
		var f = document.getElementById('frm');
		calendar.cal = c;
		calendar.caldt = dt;
		calendar.calf = f;
		var my = f[dt + '_year_month'].value.split( "-" );
		y = my[0];
		m = my[1];
		d = f[dt + '_monthday'].value;
		// Ensure y is nonzero so the pop-up calendar correctly figures out the past/current/future classes for each monthday.
		if ( y === '0' )
		{
			y = new Date().getFullYear();
		}
		buildCal( y, m, d );
		var box = getDimensions( i );
		var
			left = box.x,
			top = ( box.y + i.offsetHeight );
		c.style.left = left + 'px';
		c.style.top = top + 'px';
		c.style.display = "block";
	}
}

function closeCal()
{
	calendar.cal.style.display = 'none';
}

function prevMonth( y, m )
{
	if ( new Date( y, m - 1, 1 ) < td )
	{
		return;
	}
	if ( m > 1 )
	{
		m--;
	}
	else
	{
		m = 12;
		y--;
	}
	buildCal( y, m );
}

//does this finction need to check for max month/year?
function nextMonth( y, m )
{
	if ( m < 12 )
	{
		m++;
	}
	else
	{
		m = 1;
		y++;
	}
	buildCal( y, m );
}

function goYearMonth( ym )
{
	var ymlist = ym.split("-");
	buildCal( ymlist[0], ymlist[1] );
}

function pickDate( y, m, d, dt )
{
	// set form values
	var f = calendar.calf;
	var dt = calendar.caldt;
	f[dt + '_year_month'].value = y + "-" + m;
	f[dt + '_monthday'].value = d;
    tickCheckBox( 'availcheck' );
	if ( dt == "checkin" )
	{
		checkDateOrder( f, 'checkin_monthday', 'checkin_year_month', 'checkout_monthday', 'checkout_year_month' );
	}
	closeCal();
	updateDaySelect( f );
}

function initDaySelect()
{
	var forms = document.getElementsByTagName( 'form' );
	for ( var i = 0; i < forms.length; i++ )
	{
		if ( forms[i].checkin_monthday )
		{
			if ( !gClientIsIE5 )
			{
				forms[i].validator = new booking.datebox.Validator( forms[i] );
			}
			updateDaySelect( forms[i] );
		}
	}
}

function updateDaySelect( me )
{
	// 1-2 testing
	if ( !days3 )
	{
		return;
	}
	var frm = document.getElementById('frm');
	if ( frm.getAttribute( 'id' ) !== 'frm' && frm.className !== 'availForm' )
	{
		return;
	}
	if ( !frm.checkin_monthday || !frm.checkout_monthday || !frm.checkin_year_month || !frm.checkout_year_month )
	{
		return;
	}
	if ( frm.checkin_monthday.value === '0' && frm.checkout_monthday.value === '0' && frm.checkin_year_month.value === '0' && frm.checkout_year_month.value === '0' )
	{
		return;
	}
	// If the year-month fields have nonzero values, prepend the day of the week to each monthday in the check-in and check-out monthday Selects.
	var
		ci_d = frm.checkin_monthday,
		co_d = frm.checkout_monthday,
		ci_my,
		co_my,
		todaysDate;
	// If the form field has a nonzero value, use it;
	if ( frm.checkin_year_month.value !== '0' )
	{
		ci_my = frm.checkin_year_month.value.split( "-" );
	}
	else
	{
		// Use the current date value.
		todaysDate = new Date();
		ci_my = [ todaysDate.getFullYear(), todaysDate.getTwoDigitMonth() ];
	}
	if ( frm.checkout_year_month.value !== '0' )
	{
		co_my = frm.checkout_year_month.value.split( "-" );
	}
	else
	{
		todaysDate = new Date();
		co_my = [ todaysDate.getFullYear(), todaysDate.getTwoDigitMonth() ];
	}
	var
		ci_sel = Math.max( ci_d.selectedIndex, 0 ),
		co_sel = Math.max( co_d.selectedIndex, 0 ),
		ci_sel_value = ci_d[ ci_sel ].value,
		co_sel_value = co_d[ co_sel ].value,
		monthDays = [],
		opt,
		i;

	ci_d.innerHTML = '';
	co_d.innerHTML = '';

	// Build the Day/Month prompt Options if the monthday values aren't already set or, if they are set, they are nonzero; and if the client isn't IE 5. This condition mimics the TMPL_IF in datebox.inc/div#avail (except for the inclusion here of gClientIsIE5).
	var MonthdayPromptOption = function ()
	{
		this.option = {
			"_this" : this,
			"@selected" : "selected",
			"@class" : "day prompt site_experiment_encourage_date_entry_2",
			"@value" : 0,
			"#text" : day
		};
	};
	if ( ci_sel_value === '0' )
	{
		buildHtmlNode( new MonthdayPromptOption(), ci_d ).selected = true;
	}
	if ( co_sel_value === '0' )
	{
		buildHtmlNode( new MonthdayPromptOption(), co_d ).selected = true;
	}
	function writeMonthdaysOptions( numberOfMonthdaysToShow, yearMonthSelectElement, monthDaysArray, monthDaysSelectElement, monthDaySelectValue )
	{
		var i, optionElementInnerHTML, optionElement;
		for ( i = 0; i < numberOfMonthdaysToShow; i++ )
		{
			optionElement = document.createElement( 'option' );
			optionElementInnerHTML = i + 1;
			if ( yearMonthSelectElement.value !== '0' )
			{
				optionElementInnerHTML = monthDaysArray[i] + ' ' + optionElementInnerHTML;
			}
			optionElement.innerHTML = optionElementInnerHTML;
			optionElement.value = ( i + 1 );
			if ( i > 0 && monthDaySelectValue == i + 1 )
			{
				optionElement.defaultSelected = optionElement.selected = true;
			}
			monthDaysSelectElement.appendChild( optionElement );
		}
	}
	// Check-in month
	monthDays = buildDaysForMonth( ci_my[0], ci_my[1] );
	var numberOfMonthdaysToShow = 31;
	if ( frm.checkin_year_month.value !== '0' )
	{
		numberOfMonthdaysToShow = monthDays.length;
	}
	writeMonthdaysOptions( numberOfMonthdaysToShow, frm.checkin_year_month, monthDays, ci_d, ci_sel_value );
	// Checkout month
	monthDays = buildDaysForMonth( co_my[0], co_my[1] );
	numberOfMonthdaysToShow = 31;
	if ( frm.checkout_year_month.value !== '0' )
	{
		numberOfMonthdaysToShow = monthDays.length;
	}
	writeMonthdaysOptions( numberOfMonthdaysToShow, frm.checkout_year_month, monthDays, co_d, co_sel_value );

	if ( document.all && /MSIE 6\.0/.test(navigator.appVersion) )
	{
		ci_d.value = ci_sel_value;
		co_d.value = co_sel_value;
	}
}

function buildDaysForMonth( year, month )
{
	// Month index starts on 0(-11) in Date()-object
	var monthDate = new Date( year, month - 1 );
	var orgMonth = monthDate.getMonth();
	var dayArray = [], weekDay;
	while ( monthDate.getMonth() == orgMonth )
	{
		// Week starts on Sunday in Date()-object
		weekDay = ( monthDate.getDay() == 0 ) ? 6 : ( monthDate.getDay() - 1 );
		dayArray.push( days3[weekDay] );
		monthDate.setDate( monthDate.getDate() + 1 );
	}
	return dayArray;
}

function switchDateStack( me, page )
{
	var stackPage = DOM.getParentOrSelf( me, 'div' );
	var stackCount = 0;
	while ( stackPage )
	{
		if ( stackPage.nodeName.toLowerCase() == 'div' )
		{
			stackCount++;
			if ( stackCount == page )
			{
				stackPage.style.display = 'block';
			}
			else
			{
				stackPage.style.display = 'none';
			}
		}
	stackPage = stackPage.nextSibling;
	}
}

// Searches children to find image
function getChildImage( contextElm )
{
	contextElm = contextElm.firstChild;
	while ( contextElm.nodeName.toLowerCase() != 'img' && contextElm.nextSibling )
	{
		contextElm = contextElm.nextSibling;
	}
	return contextElm;
}

function getParentOrSelf( contextElm, nodeName )
{
	nodeName = nodeName.toLowerCase();
	while ( contextElm.nodeName.toLowerCase() != nodeName && contextElm.parentNode )
	{
		contextElm = contextElm.parentNode;
	}
	return contextElm;
}

// Getting element dimensions
function getDimensions( elm ) {
	var box = { x:0, y:0, w:0, h:0 };
	if(document.getBoxObjectFor) {
		var boxRef = document.getBoxObjectFor(elm);
		box.x = boxRef.x;
		box.y = boxRef.y;
		box.w = boxRef.width;
		box.h = boxRef.height;
	}
	else if(elm.getBoundingClientRect) {
		var rxIE50 = /MSIE 5\.0/g;
		//alert(rxIE50 + '.test("' + navigator.appVersion + '" = ' + rxIE50.test(navigator.appVersion));
		var boxRef = elm.getBoundingClientRect();
		box.x = boxRef.left;
		box.y = boxRef.top;
		box.w = (boxRef.right - boxRef.left);
		box.h = (boxRef.bottom - boxRef.top);
		//var s='';for(p in boxRef) s+=p+'    '; alert(s);
		// Damn IE...
		if(document.compatMode && document.compatMode != 'BackCompat') {
			// IE6/compliance mode
			box.x += document.documentElement.scrollLeft - 2;
			box.y += document.documentElement.scrollTop - 2;
		}
		else if(!gClientIsIE5) {
			// IE5.5
			box.x += document.body.scrollLeft - 2;
			box.y += document.body.scrollTop - 2;
		}
	}
	else {

		box.w = elm.offsetWidth;
		box.h = elm.offsetHeight;
		while(elm) {
			box.x += elm.offsetLeft;
			box.y += elm.offsetTop;
			if(elm.offsetParent) // Required for Safari 1.3 :(
				elm = elm.offsetParent;
			else
				break;
		}
	}
	var cc;
	if(cc = document.getElementById('bodyconstraint'))
		box.x -= cc.offsetLeft;
	return box;
}
