// --- [start /site/holidaysSearchForm.js] ---
// *********************** //
/* Holidays search form scripts *.
 * Build calendar, flexible date, date switching, calendar functionality, ajax functionality to populate destination, star rater etc
 */


// Initialise calendar
var endDate = new Date();
endDate.setTime(endDate.getTime()+(1000*60*60*24*30*11));
var month = endDate.getMonth();
if (month == 0) month = 12;
endDate = endDate.getDate()+'/'+month+'/'+endDate.getFullYear();
var category='frontier';
startUpCalendar(theDate,endDate,'holidaysSearch','depDay','depMonth');	

// showChildAges function - show/hide child ages based on number of children selected
function showChildAges() {
	var children = lm.e('children'); // No.children dropdown
	var numChildren = children.options[children.selectedIndex].value;
	
	for(i=0;i<8;i++){
		lm.e('childAge'+i).style.display=(numChildren>i)?"block":"none";
		lm.e('childrenAges').style.display=(numChildren>0)?"block":"none";
		
		if(numChildren <= i) {
			lm.e('childAge'+i+'-label').selectedIndex=0;	
		}
		
	}
	// Call function to validate child ages
	validateFields();
}


/* Author : Shiraz Solangi */
/* Redirect for any any any page */

function checkDefaultSubmit() {
	var flag = false;
	var holsForm = document.forms['holidaysSearch'];
	for (var i = 0, j = holsForm.length; i < j; i++) {
		var element = holsForm.elements[i];
		
		if (element.name != 'adults'  && element.name != 'children' && element.name != 'childAge0' && element.name != 'childAge1' && element.name != 'childAge2' && element.name != 'childAge3' && element.name != 'childAge4' && element.name != 'childAge5') {		
		
			if (element.type == 'text' && element.value == '') {
				flag = true; 
			}			
			else if (element.type == 'select-one' && element.name != 'dim46' && (element.value=='-1' || element.value=='0' || element.value=='')) {				
				flag = true; 
			}
			else if(element.type == 'select-one' && element.name == 'dim46' && (element.value=='-1' || element.value=='2')){
				flag = true; 
			}
			else if (element.type == 'checkbox' && !element.checked) {
				flag = true; 
			}
			else if (element.type == 'hidden' || element.type == 'image' || element.type == 'submit' || element.type == undefined) {
				//do nothing						
			}
			else {				
				return true;
			}	
		}			
	}	

	if(flag) {						
		var numAdults = (lm.e('adults').value);
		var numChildren = (lm.e('children').value);
		var childAges = lm.getElementsBy({parentNode:'childrenAges', tagName:'select'});
		
		var martiniPageLink = '/site/travel/holidays/holiday-blank-search.html?skin=tesco&dimension5=-1&dim46=0&sourceType=0&dimension0=-1&destText=&depMonth=0&maxResults=10&dimension23=-1&dimension45=-1&depDay=0&expandThreshold=0&dim14=-1&maxOffset=0&sortBy=0%2C1';
		var martiniPageDynamicParams = '&' + 'adults=' + numAdults + '&' + 'children=' + numChildren + '&' + 'childAge0=' + childAges[0].value + '&' + 'childAge1=' + childAges[1].value + '&' + 'childAge2=' + childAges[2].value + '&' + 'childAge3=' + childAges[3].value + '&' + 'childAge4=' + childAges[4].value + '&' + 'childAge5=' + childAges[5].value;
		var martiniPageDynamicParams = (document.location.href.indexOf('DCABT') != 1)? martiniPageDynamicParams + '&' + 'DCABT=true' : martiniPageDynamicParams;
		var martiniPageDynamicParams = (document.location.href.indexOf('DEBUG') != -1)? martiniPageDynamicParams + '&' + 'DEBUG=' : martiniPageDynamicParams;		
		var martiniPageURL = martiniPageLink+martiniPageDynamicParams;			
		document.location.href = martiniPageURL;						 		
		return false; 
	} else {				
		return true;
	}
}

/* author Laurent Muchacho */
/* 06/03/2007 */
var HolidaySearchDestination= function(){
	var _this = {
		fName : 'holidaysSearch',
      	types : 'dimension0',
		destinationText : 'destText',		  
      	destinationDropdown : 'dimension23',
		selectedDestination : false,
		resorts : 'dimension5',
		defaultDestinationOptions : [],
		createDestinationSwitchLink : function(){ 
			function createLink(ref, _function, txt){ 				
				var eNode = lm.e(ref);				
				var parent = lm.e(ref).parentNode;
								
				var sLink = lm.ce('span');				
				sLink.setAttribute('class','fauxLink');
				sLink.className = 'fauxLink';
				lm.append(document.createTextNode(txt),sLink);				
				parent.insertBefore(sLink, eNode);
				
				//var textLinkElement = new lm.element.block({tagName:'span', className:'fauxLink', insert:{before:ref}, innerHTML:txt});
				lm.addEvent({e:sLink, eT:'click', fn:_function})				
			}
			
			createLink('destTextEntry', function(){ 
				_this.showDestinationDropdown();
				_this.destinationText.value = '';
			}, 'List');

			createLink('destinationListSelect', function(){ 
				_this.showDestinationText();
				//_this.populateDefaultDestination();
			}, 'Enter');
			
			this.showDestinationDropdown();
		},
		showDestinationDropdown : function(){
			_this.destinationText.parentNode.style.display = 'none';
			_this.destinationText.value = '';
			_this.destinationDropdown.parentNode.style.display = 'block';
		},
		showDestinationText : function(){
			_this.destinationDropdown.parentNode.style.display = 'none';	
			_this.destinationDropdown.value = '-1';		
			_this.destinationText.parentNode.style.display = 'block';
		},
		populateDefaultDestination : function(){
			_this.hideResorts();
			_this.destinationDropdown.innerHTML = '';
			new lm.element.block({p:_this.destinationDropdown, tagName:'option', value:'-1', innerHTML:'I don\'t mind'});
			lm.forEach(this.defaultDestinationOptions, function(option){
				var o = _this.destinationDropdown.options[_this.destinationDropdown.options.length] = new Option(option.text, option.value, false, (option.value==lm.querystring.dimension23)?true:false);
				if(option.value.indexOf('::')>-1){						
						o.className = 'manualDestinations';
				}
			})
			_this.destinationDropdown.selectedIndex = 0
		},
		getDestinations : function(){			
			_this.showDestinationDropdown();						
			_this.destinationDropdown.innerHTML = '';
			new lm.element.block({p:_this.destinationDropdown, tagName:'option', value:'-1', innerHTML:'I don\'t mind'});
						
			var types = _this.types.options[_this.types.selectedIndex].value;
		
			if(types==-1){				
				_this.populateDefaultDestination();
			} else {				
				lm.httpRequest({
					url : '/site/travel/holidays/holiday-search-ajax.html?adults=2&currency=GBP&locale=en_GB&navigation0=' + encodeURIComponent(types) + '&partnerId=0&searchNavigationType=1&skin=tesco&sourceType=0',
					response : 'txt',					
					onComplete : _this.populateDestination
				})
			}
			
			// Hide resorts dropdown when type of holiday is changed
			_this.hideResorts()
			_this.resorts.innerHTML = '';
		},
		populateDestination : function(response){
			var destinations = null;
			if(destinations = lm.parse(response.replace(/#/g, '\'')) ){
				lm.forEach(destinations, function(option){
					var o = _this.destinationDropdown.options[_this.destinationDropdown.options.length] = new Option(option.name, option.value, false, false);
					if(option.value.indexOf('::')>-1){						
						o.className = 'manualDestinations';
						o.style.paddingLeft = '1em';
					}
				})
			}
		},
		selectDestination : function(selectedDestination){ 
			var selected = false;
			lm.forEach(_this.destinationDropdown.options, function(option){ 
				if(option.value==selectedDestination){
					option.selected = true;
					selected = true;
				}
			})				
			if(!selected){
				setTimeout(_this.selectDestination, 200, selectedDestination);
			}else{
				return
			}
		},
		hideResorts : function(){
			this.resorts.parentNode.style.display = 'none';
		},

		showResorts : function(){
			if (readQueryString("searchType")=="advanced") {
				this.resorts.parentNode.style.display = 'block';
			}
		},

		getResorts : function(){			
			_this.resorts.innerHTML = '';
			new lm.element.block({p:_this.resorts, tagName:'option', value:'-1',  innerHTML:'All resorts'});
			
			var destination = _this.selectedDestination || _this.destinationDropdown.value;
			_this.selectedDestination = false;

			if(destination==-1){
				_this.hideResorts();
			}else{
				lm.httpRequest({
					url : '/site/travel/holidays/holiday-search-ajax.html?adults=2&currency=GBP&locale=en_GB&navigation23=' + encodeURIComponent(destination) + '&partnerId=0&searchNavigationType=1&skin=tesco&sourceType=0',
					response : 'txt',
					onComplete : _this.populateResorts
				})
			}			
		},
		populateResorts : function(response){ 			
			_this.showResorts();
			var resorts = null;
			if(resorts = lm.parse(response.replace(/#/g, '\'')) ){
				lm.forEach(resorts, function(option){
					_this.resorts.options[_this.resorts.options.length] = new Option(option.name, option.name, false, false);
				})
			}
		},
		selectResorts : function(selectedResort){
			var selected = false;
			lm.forEach(_this.resorts.options, function(option){ 
				if(option.value==selectedResort){
					option.selected = true;
					selected = true;
				}
			})
			if(!selected){
				setTimeout(_this.selectResorts, 200, selectedResort);
			}else{
				return
			}
		},		
	  	init : function(){ 
			var fieldName = {types : this.types, destinationDropdown : this.destinationDropdown, destinationText : this.destinationText, resorts : this.resorts};
			
			this.f = document.forms[this.fName];
			this.types = this.f.elements[fieldName.types];
			this.destinationDropdown = this.f.elements[fieldName.destinationDropdown];
			this.destinationText = this.f.elements[fieldName.destinationText];
			this.resorts = this.f.elements[fieldName.resorts];
						
			lm.forEach(this.destinationDropdown.options, function(option, index){
				if(index>0){
					_this.defaultDestinationOptions.push(option);
				}
			});
			
			this.types.onchange = this.getDestinations;						
			this.destinationDropdown.onchange = this.getResorts;
			
			this.createDestinationSwitchLink();
			this.hideResorts();			
			
			var cookieObject = false, savedData = false;
			
			// Check for cookie existence or query string params which override the cookie
			if( savedData = lm.parse(lm.cookie.sFastBrowse)['holidaysSearch'] ) {
				
				//Reset specific cookie dimensions if set via query string
				if(lm.querystring.dimension0 || lm.querystring.dimension23){	
					lm.forEach(savedData, function(item){						
						if (lm.querystring.dimension0 && item['dimension0']){
							item['dimension0'] = lm.querystring.dimension0;   	//Reset holiday type cookie
						}
						if (lm.querystring.dimension23 && item['dimension23'] ){							
							item['dimension23'] = lm.querystring.dimension23;   //Reset destination cookie							
						}						
					})
					lm.cookie.create({name:'sFastBrowse', value:'{"holidaysSearch":' + lm.stringify(savedData) + '}' , expire:7});
				}
			 
				lm.forEach(savedData, function(value){
					if(value[fieldName.types] && _this.destinationText.parentNode.style.display == 'none'){
						_this.getDestinations();						
					}else if( (_this.selectedDestination = value[fieldName.destinationDropdown]) && value[fieldName.destinationDropdown] != '-1'){ 					
						_this.showDestinationDropdown();
						_this.selectDestination(_this.selectedDestination);
						_this.getResorts();						
					}else if(_this.selectedResort = value[fieldName.resorts]){
						_this.selectResorts(value[fieldName.resorts]);						
					}else if(value['destText']) {						
						_this.showDestinationText();	
					}else if(value['dimension47'] || value['dimension48']){
						var toSwitch = false;
						lm.forEach(lm.getElementsBy({parentNode:'paneTabContainer', tagName:'li', className:'paneTabTitle'}), function(item){
							if(item.className == 'paneTabTitle'){
								toSwitch = item.getElementsByTagName('A')[0];
							} 
						})
						tabSwitch(toSwitch);					}
				})				
			}
			else {	//No cookie available
				if (lm.querystring.dimension0) {
					this.getDestinations();	
				}
				if (lm.querystring.dimension23) {					
					var selectedDim23 = lm.getElementsBy({parentNode:'destinationListSelect', tagName:'option', filter:function(item){
						return (item.value==lm.querystring.dimension23);}
					});
					if(selectedDim23[0]){
						selectedDim23[0].selected = true;
						this.getResorts();
					}					
				}
			}
	  	}
    }
    return _this
}();
//Run the initalise funcrion for the search form immediately

lm.addEvent({
	fn:function(){
		HolidaySearchDestination.init();
	}
})	

/* Author : Shiraz Solangi */
/* Add 'All' checkbox star rater */

if (lm.e('starRatings')) {	
	var x = lm.e('starRatings');
	var stars = x.getElementsByTagName('input');	

	function checkAllRaters() {
		var flag = false;
		for(var i = 0; i < stars.length-1; i++) { 
			if (stars[i].checked) {
				flag = true;
			} else  {
				lm.e('allRater').checked = false;			
				break;
			}
			lm.e('allRater').checked = (flag) ? true : false;
		}
	}
	
	lm.forEach(stars, function(item) {			
		lm.addEvent({e:item, eT:'click', fn:function() {					
			checkAllRaters();
		} });
	});
	
	new lm.element.block({p:lm.e('starRatings'), tagName:'label',  innerHTML:'<input type="checkbox" id="allRater" /> All'});	
	lm.addEvent({e:lm.e('allRater'), eT:'click', fn:function() {
		if (this.checked == false) {
			this.checked = false;
		} else {			
			lm.forEach(stars, function(item) {			
				item.checked = true;		
			});
		}
	}}); 

	checkAllRaters();
}

//Builds the flexible date search tab 
// Get fixed dates content by cloning content on inital load

var fixedDatesContent = lm.e('datesContent').innerHTML;

function createFlexibleDatesContent() {

	lm.e('datesContent').innerHTML = '';

	new lm.element.block({p:'datesContent', tagName:'h5', innerHTML:'Preferred day/s of travel'});
	new lm.element.block({p:'datesContent', innerHTML:renderDaysOfWeek});	
	new lm.element.block({p:'datesContent', tagName:'h5', innerHTML:'Travel between'});
	new lm.element.block({p:'datesContent', id:'fromMonthLabel', tagName:'label', innerHTML:'Month:'});
	new lm.element.block({p:'fromMonthLabel', id:'fromMonth', tagName:'select'});
	
	var fromMonth = lm.e('fromMonth');	
	fromMonth.name = 'dimension47';
																		
	fromMonth.options[fromMonth.options.length] = new Option('February', 2, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('March', 3, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('April', 4, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('May', 5, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('June', 6, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('July', 7, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('August', 8, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('September', 9, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('October', 10, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('November', 11, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('December', 12, false, false);
	fromMonth.options[fromMonth.options.length] = new Option('January', 1, false, false);
			
	
	new lm.element.block({p:'datesContent', id:'toMonthLabel', tagName:'label', innerHTML:'Month:'})
	new lm.element.block({p:'toMonthLabel', id:'toMonth', tagName:'select'})
	
	var toMonth = lm.e('toMonth');
	toMonth.name = 'dimension48';
																		
	toMonth.options[toMonth.options.length] = new Option('February', 2, false, false);
	toMonth.options[toMonth.options.length] = new Option('March', 3, false, false);
	toMonth.options[toMonth.options.length] = new Option('April', 4, false, false);
	toMonth.options[toMonth.options.length] = new Option('May', 5, false, false);
	toMonth.options[toMonth.options.length] = new Option('June', 6, false, false);
	toMonth.options[toMonth.options.length] = new Option('July', 7, false, false);
	toMonth.options[toMonth.options.length] = new Option('August', 8, false, false);
	toMonth.options[toMonth.options.length] = new Option('September', 9, false, false);
	toMonth.options[toMonth.options.length] = new Option('October', 10, false, false);
	toMonth.options[toMonth.options.length] = new Option('November', 11, false, false);
	toMonth.options[toMonth.options.length] = new Option('December', 12, false, false);
	toMonth.options[toMonth.options.length] = new Option('January', 1, false, false);
			
}

//Trim white space 
function trimString(str) {
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

/* Author : Shiraz Solangi */
//Activates the tab onclick
function tabSwitch(obj) {	
	//First set all tabs to inactive
	var dateTabs = lm.getElementsBy({parentNode:lm.e('paneTabContainer'),tagName:'li'})
	for (var i = 0, j = dateTabs.length; i < j; i++) {		
		var activeClass = dateTabs[i].className;		
		activeClass = trimString(activeClass.replace('activePane',''));			
		dateTabs[i].className = activeClass;
	}
	
	obj.parentNode.className += ' activePane';
	
	if (trimString(obj.innerHTML)=="I have a date in mind") {			
		lm.e('datesContent').innerHTML = fixedDatesContent;		
	}
	else if (trimString(obj.innerHTML)=="My dates are flexible") {
		lm.e('datesContent').innerHTML = '';		
		createFlexibleDatesContent();			
	}	
}


// Create a form utility object
if(typeof lm == 'object' && typeof lm.form == 'object'){
	var formUtility = new lm.form.utility('holidaysSearch');
	formUtility.remember = {
		p:['adults','children', 'childAge0', 'childAge1', 'childAge2', 'childAge3', 'childAge4', 'childAge5', 'dimension45'],
		s:['destText', 'accommodationName', 'suitableFor', 'resortAtmosphere', 'depMonth', 'depDay', 'dim14', 'dim29', 'dim46', 'dimension0', 'dimension5', 'dimension8', 'dimension10', 'dimension18', 'dimension23', 'dimension29', 'dimension30', 'dimension31', 'dimension34', 'dimension37', 'dimension39', 'dimension47', 'dimension48', 'dimension50' ]
	};
}

// Advanced search link remembering
lm.addEvent({
	fn:function(){
	  var moreOptions =  lm.getElementsBy({tagName:'a', parentNode:lm.getElementsBy({className:'moreOptions'})[0]})[0];
	  var moreOptionHref = moreOptions.href;
	  moreOptions.href = 'javascript:void(0)';
	  lm.addEvent({
		  e:moreOptions,
		  eT:'click',
		  fn:function(){
			  formUtility.getFieldToRemember();
			  document.location.href = moreOptionHref;
			  return false;
		  }
	  })
	}
})

// Error bubble messages
function validateFields() {	
	formUtility.validate = [];	
	var selectFields = lm.getElementsBy({parentNode:'childrenAges', tagName:'select'});
	
	lm.forEach(selectFields, function(item){		
		if(item.parentNode.style.display == 'block'){
			formUtility.validate.push({
				referring_element:item.id, 
				message:translateChildAgeErrorMessage,
				evaluate:function(){ 
					var selectValue = lm.e(item.id);
					return (selectValue.selectedIndex == 0) ? true : false;
				}
			})
		}		
	})
}

function createMessageShell_from_string(){
	var ico_error = 'http://cdn.lastminute.com/site/ico_error.gif?skin=engb.lastminute.com';
	var ico_error_arrow_right = 'http://cdn.lastminute.com/site/error_bubble_ico_arrow_right.gif?skin=engb.lastminute.com';
	var html = '<div id="lmErrorBubbleContent" class="text_error clearFloat"><img src="'+ico_error+'" alt="!" width="16" height="16" /><div id="lmErrorBubbleMessage"></div><div id="lmErrorBubbleLink"><a href="javascript:formUtility.message.hide()" class="text_error"><strong>OK</strong>&nbsp;<img src="'+ico_error_arrow_right+'" alt="&gt;" /></a></div></div>';	
    formUtility.message.builtShell(html, 'lmErrorBubble', 'lmErrorBubbleMessage');
}
function setPartnerId() {
	var els, partnerId = lm.querystring.judithPId || lm.querystring.partnerId || lm.cookie.partnerId || 0, func = function (el) {
		return (el.name === 'judithPId' || el.name === 'partnerId'); 
	};
	if (lm.cookie.partnerId) {
		lm.cookie.partnerId = partnerId;
	} else {
		lm.cookie.create({name:'partnerId', value:partnerId});
	}
	els = lm.getElementsBy({parentNode: 'holsSearch', filter: func}).concat(lm.getElementsBy({parentNode: 'info', filter: func}));
	lm.forEach(els, function (el) {
		el.value = partnerId;				  
	});
}
lm.addEvent({fn: setPartnerId});
//Add events to the onload
if(typeof lm == 'object'){
	lm.addEvent({fn: showChildAges});
	lm.addEvent({fn: createMessageShell_from_string});
}

/* Author : Shiraz Solangi */
/* Customise search - preselect date range to two weeks on last second deals page */

function setDateRange(){	
	fDate = new Date();
	fDate.setDate(fDate.getDate()+7);
	
	fDay = fDate.getDate();
	fMonth = fDate.getMonth()+1;
	
	//Get DOM option objects
	var depDay = lm.getElementsBy({parentNode:'holsDepDay', tagName:'option', filter:function(item){
						return (item.value==fDay.toString())}
	});
	
	var depMonth = lm.getElementsBy({parentNode:'holsDepMonth', tagName:'option', filter:function(item){
						 return (item.value==fMonth.toString())}
	});
	
	depDay[0].selected = true;
	depMonth[0].selected = true;		
}
// --- [end prdpcthpb0201:4002 - /site/holidaysSearchForm.js - Feb 9, 2010 3:40 pm GMT - akamai,pcth0614,pct0410 - vg@OHQqoVrcAADQjWGcAABAS - cache 1800 ] ---
