/*** Sets the values which the availability calendar shifts by when scrolled through (seen on selectCategoryHotel.do). ***/
// get translations
//
	var moreText = ' more';
	var lessText = ' less';
function initRoomAvailability() {	
	var availability = lm.e('availability');
	availability.style.overflow = "hidden"; 
}	
var tableIndex = 0;
function changeAvailabilityMonth(direction) {
	availabilityMonths = document.getElementById('availability_months');
	availabilityMonthsTables = availabilityMonths.getElementsByTagName('table');
	if (direction=='forward'){
		tableIndex+=1
		for (x=0;x < availabilityMonthsTables.length;x++){
			if (x==tableIndex){
				availabilityMonthsTables[x].parentNode.style.display=''
			} else {
				availabilityMonthsTables[x].parentNode.style.display='none'
			}
		}
	} else {
		tableIndex-=1
		for (x=0;x < availabilityMonthsTables.length;x++){
			if (x==tableIndex){
				availabilityMonthsTables[x].parentNode.style.display=''
			} else {
				availabilityMonthsTables[x].parentNode.style.display='none'
			}
		}
	}
}
/*** Ends  ***/
formReference = document.forms.hotels_search;
/*** Sets the correct number of days in the pulldown menu when a month is selected  ***/
function selectMonth(dayField,monthField){        
  var selectedMonth = monthField.options[monthField.selectedIndex].value;
  var selectedDay = dayField.options[dayField.selectedIndex].value;
  var selectedYear;
  var today = new Date();
  var thisYear=today.getYear();
  if(thisYear < 2000)thisYear+=1900;
  var febDate=new Date(thisYear,(selectedMonth-1),selectedDay);
  if (febDate < today){selectedYear = thisYear+1;}
  else{selectedYear = thisYear;}
  var days = getNumDays(selectedMonth,selectedYear);
  dayField.length=days;        
  for(var i=1;i <= days;i++){
      dayField.options[i-1] = null;
      dayField.options[i-1] = new Option(i,i);}
  if (selectedDay <= dayField.options.length){
  	dayField.selectedIndex=selectedDay-1;}
}           
/*Hidden on 1 Nov 07 because it clashes with same function in calendar.js
function getNumDays(M,Y){
  if(M==2){
    var febDate=new Date(Date.UTC(Y,1,29)); 
    return (febDate.getMonth()==1)?29:28; } 
  else return (M==9||M==4||M==6||M==11)?30:31;
}*/
/*** Updates form objects: lmnCheckOutDay, lmnCheckOutDayDisplay, lmnCheckOutMonthDisplay and formReference. */	 
function updateCheckOut(value) {		
  var months_array = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
  // save number of nights
  no_nights = parseInt(value);
  // check that it is a valid number
  if(isNaN(no_nights)||no_nights<=0) {
    //alert("Please enter a valid number of nights"); 
  }
  else {
    // construct the check in date
    // for this we need to decide if the month selected is before current month, if so
    // user is booking for next year
    d = new Date();
    y = d.getFullYear();
    m1 = d.getMonth();			
    m2 = formReference.lmnCheckInMonth.value-1; // month is not 0 based in calendar!!
    if(m2 < m1) { y = y+1; }
    // now create the proper check in date
    real_checkin_s = formReference.lmnCheckInDay.value+" "+months_array[parseInt(formReference.lmnCheckInMonth.value)-1]+" "+y;
    real_checkin_d = new Date(real_checkin_s);
    dayOfCheckInMonth = real_checkin_d.getDate();
    dayOfCheckOutMonth = dayOfCheckInMonth + no_nights;
    real_checkout_d = real_checkin_d;
    real_checkout_d.setDate(dayOfCheckOutMonth);
    // get day and month for check out
    check_out_day = real_checkout_d.getDate();
    check_out_month = nnMonthsArray[real_checkout_d.getMonth()];
    // show user
    formReference.lmnCheckOutDay.value=check_out_day;
    formReference.lmnCheckOutMonth.value=(real_checkout_d.getMonth()+1);
    formReference.lmnCheckOutDisplay.value=check_out_day+' '+check_out_month;
  }
}
/* link the radio buttons for the search categories in IE */
lm.forEach(lm.getElementsBy({tagName:'input'}),function(item)
{
	if(item.type=='radio' && item.checked==false && item.name=='' && item.parentNode.tagName=='A') 
	{
		lm.addEvent({e:item, eT:'click', fn:function(){ window.location = item.parentNode.href}})
	}
})
/* change child number dropdown range depending on number of adults 
lm.forEach(lm.getElementsBy({tagName:'select',parentNode:'roomAllocationContainer',filter:function(item){return item.id.match(/(adults|children)[0-9]/)}}),
			function(item){
				lm.addEvent({
					e:item,
					eT:'change',
					fn:function(item){
						if(item.target)	var targetId = item.target
						else var targetId = item.srcElement					 		
						changeDropDownRange(targetId)
					}
				})
			}
)
*/
hotelRoomAllocationDropDown = {
	selectOnChange:function(){
			lm.forEach(lm.getElementsBy({tagName:'select',parentNode:'roomAllocationContainer',filter:function(item){return item.id.match(/(adults|children)[0-9]/)}}),
			function(item){
				lm.addEvent({
					e:item,
					eT:'change',
					fn:function(item){
						if(item.target)	var targetId = item.target
						else var targetId = item.srcElement	
						if(targetId.id.match(/adults/)){
							adultNum = targetId.value;
							childrenNode = document.getElementById(targetId.id.replace('adults','children'));
							optionStart = 0;
						}else{
							adultNum = lm.e(targetId).value;
							childrenNode = document.getElementById(targetId.id.replace('children','adults'));	
							optionStart = 1;
						}
						var initialValue = childrenNode.value
						childrenNumChange = 5 - adultNum;
						if(initialValue > childrenNumChange){
							initialValue == childrenNumChange
						}
						lm.forEach(lm.getElementsBy({parentNode:childrenNode, tagName:'option'}), function(item){
							childrenNode.removeChild(item)
						})
						for(i=optionStart;i < childrenNumChange;i++){
							var newOption = lm.ce('option')
							newOption.value = i
							newOption.innerHTML = i
							if(i==initialValue) newOption.selected = 'selected'
							childrenNode.appendChild(newOption)
						}
					}
				})
			}
		)
	},
	init: function(){
		lm.forEach(lm.getElementsBy({tagName:'select',parentNode:'roomAllocationContainer',filter:function(item){return item.id.match(/(adults|children)[0-9]/)}}), function(item){
			if(item.id.match(/adults/)){
				adultNum = item.value;
				childrenNode = document.getElementById(item.id.replace('adults','children'));
				optionStart = 0;
			}else{
				adultNum = lm.e(item).value;
				childrenNode = document.getElementById(item.id.replace('children','adults'));	
				optionStart = 1;
			}
			var initialValue = childrenNode.value
			childrenNumChange = 5 - adultNum;
			if(initialValue > childrenNumChange){
				initialValue == childrenNumChange
			}
			lm.forEach(lm.getElementsBy({parentNode:childrenNode, tagName:'option'}), function(item){
				childrenNode.removeChild(item)
			})
			for(i=optionStart;i < childrenNumChange;i++){
				var newOption = lm.ce('option')
				newOption.value = i
				newOption.innerHTML = i
				if(i==initialValue) newOption.selected = 'selected'
				childrenNode.appendChild(newOption)
			}
	})
		this.selectOnChange()
	}
}
hotelRoomAllocationDropDown.init();
lm.toggleLastTab = function (el) {
	var content, tabContainer, tabs, lastTab;
	tabContainer = lm.getElementsBy({className: 'accordionClick'})[0];
	tabs = [];
	if (tabContainer) {
		tabContainer = tabContainer.getElementsByTagName('div')[0];
		lm.forEach(tabContainer.getElementsByTagName('div'), function (div, i) {
			if (div.parentNode == tabContainer) {
				if (div.className.indexOf('hide') == -1) {
					div.className += ' hide';
				}
				tabs.push(div);
			}
		});
		content = tabs[tabs.length - 1];
		content.className = content.className.replace('hide', '');
		lm.forEach(tabContainer.parentNode.getElementsByTagName('ul')[0].getElementsByTagName('li'), function (li) {
			li.className = li.className.replace(' active', '');
		});
		lastTab = lm.e(content.id.replace(/content/,'link'));
		if (lastTab) {
			lastTab.className += ' active';
			lm.tabOmniture(lastTab);
			lm.hideCheckAvailability();
		}
	}	
};
lm.isDisplayNone = function (el) {
	if (el.parentNode === null || el.parentNode.nodeType === 9) {
		return false;
	} 
	if (getStyle(el, 'display') === 'none') {
		 return true;
	}
	return lm.isDisplayNone(el.parentNode);
};
lm.tabOmniture = function (el) {
	var pageNameSplit, scriptTag, newScriptTag;
	pageNameSplit = s_pageName.split(' (');
	if (pageNameSplit.length > 1) {
		pageNameSplit.pop();
	}
	s_pageName = pageNameSplit.join('') + ' (' + el.getElementsByTagName('a')[0].innerHTML + ')';
	s_prop19 = s_pageName;
	scriptTag = lm.getElementsBy({tagName: 'script', filter: function(tag) {
 		if (tag.src.indexOf('s_code_remote1.js') !== -1) {
			return tag;
		}
	}})[0];
	if (scriptTag) {
		newScriptTag = lm.ce('script');
		newScriptTag.src = scriptTag.src;
		newScriptTag.type="text/javascript";
		scriptTag.parentNode.removeChild(scriptTag);
		document.body.appendChild(newScriptTag);
	}
	// Map fix
	//
		var mapEl = lm.e('mapviewer');
		if (!mapviewer && mapEl) {
			if (!lm.isDisplayNone(mapEl)) {
				displayOnMap(startLat,startLong,15,hotelName,hotelName,smallImageUrl,hotelName,shortDescriptionText,'','','',thisPage,thisPagePF,620,600)
			}
		}
};
// function to hide check availability btn when availability tab selected
//
lm.hideCheckAvailability = function () {
	var chkAvailabilityBtn = lm.e('check_availability_button'), hotelsFrm = lm.e('hotels_search');
	if (chkAvailabilityBtn && hotelsFrm) {
		chkAvailabilityBtn.style.display = (!lm.isDisplayNone(hotelsFrm)) ? 'none' : '';
	}	
};
lm.infoToggler = function (el) {
	var toggler, contentEl, content, limit, newEl, once;
	toggler = el.getElementsByTagName('a')[0];
	contentEl = el.getElementsByTagName('*')[0];
	content = contentEl.innerHTML;
	once = (el.className.indexOf('once') !== -1);
	limit = (once) ? 425 : 100;
	if (limit < content.length) {
		do {
			limit = limit + 1;		
		}
		while (content.charAt(limit) !== ' ' && content.charAt(limit) !== '.' && limit != content.length);
		if (limit !== content.length) {
			content = content.substring(0, limit) + '&#133; ';
			newEl = lm.ce('span');
			newEl.innerHTML = content;
			el.insertBefore(newEl, toggler);
			toggler.style.display = 'inline';
			lm.addEvent({
				e: toggler,
				eT: 'click',
				fn: function (e) {
					var hideBol = (contentEl.className == 'jsHide');
					newEl.className = (hideBol) ? 'jsHide' : '';
					contentEl.className = (hideBol) ? '' : 'jsHide';
					if (once) {
						toggler.innerHTML = (hideBol) ? ' ' + hotelsLess : hotelsMore;
					} else {
						toggler.innerHTML = (hideBol) ? lessText : moreText;
					}
					if (!e) { e = window.event; }
					if (e.preventDefault) { 
						e.preventDefault(); 
					} else {
						e.returnValue = false;
					}
				}
			});
		} else {
			contentEl.className = '';
		}
	} else {
		contentEl.className = '';
	}
};
lm.addEvent({
	fn: function () {
		// inits show hide code for pop destination toggler
		//
		lm.fx.showHide('pop_dest_toggler', 'pop_dest', 'click', function () {	
			var el = lm.e('pop_dest_toggler');
			el.className = (el.className.indexOf(' open') === -1) ? el.className += ' open' : el.className.replace(' open', '');
		});
		if ( lm.e('pop_dest_toggler') ) {
		    lm.style(lm.e('pop_dest_toggler'),'textDecoration','underline');
		}
		// inits tab links
		lm.forEach(lm.getElementsBy({className: 'action_button'}), function (span) {
			var lnk = span.getElementsByTagName('a')[0];
			lm.addEvent({
				e: lnk,
				eT: 'click',
				fn: function (e) {
					lm.toggleLastTab(lnk);
					if (!e) { e = window.event; }
					if (e.preventDefault) { 
						e.preventDefault(); 
					} else {
						e.returnValue = false;
					}
				}
			});
		});
		//omniture tab code
		if(lm.getElementsBy({className: 'accordionClick'})[0]){
			lm.forEach(lm.getElementsBy({className: 'accordionClick'})[0].getElementsByTagName('ul')[0].getElementsByTagName('li'), function (li, i) {
				if (i === 0) {
					lm.tabOmniture(li);
					lm.hideCheckAvailability();
				}
				lm.addEvent({
					e: li,
					eT: 'click',
					fn: function (e) {
						setTimeout(function () {
							lm.tabOmniture(li);
							lm.hideCheckAvailability();
						}, 300);
					}
				});
			});
		};
		lm.forEach(lm.getElementsBy({className: 'jsInfoToggle'}), function (el) {
			lm.infoToggler(el);
		});
		//carousel test
		//
		lm.fx.carousels.init();
	}
});
