	
	/* Global handlers used in common.left.cruises.htm
	 * @author : sfurman
	*/

	var GlobalHandlers = 
	{		
		updateSoftParameters : function(prefix, convert_date)
		{
			// convert date format
			if (convert_date == true) 
			{
				var departure_date = $(prefix + '_departure_date').value;
				$(prefix + '_date_dep').value = departure_date.replace(/\//gi, "");
			}
		},
			
		logoIE : function(imagePath) 
		{
			if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
			{
				var ieversion	= new Number(RegExp.$1);				
				
				if (ieversion < 7)
				{
					if ($('loading_logo'))
					{												
						$('logo_img').src = imagePath + '/logo_loading.gif';
					}
					else if ($('logo'))
					{
						$('logo_img').src = imagePath + '/logo.gif';
					}
				}
			}
		},

		trackView : function(selector, selected_value, search_id)
		{
			pageTracker._trackEvent('Search '+ search_id +' modification', selector, selected_value);
		},

		customTrackView : function(pageView)
		{
			pageTracker._trackPageview(pageView); 
			
			try
			{
				console.log(pageView + ' tracked');
			}	
			catch(e){}
			
		},
		
		showErrorForm : function(errorTitle, errorMessage)
		{
			var $dialog = $j('<div></div>')
			.html('<p>' + errorMessage + '</p>')
			.dialog
			(
				{
					autoOpen: false,
					title: errorTitle,
					modal: true,
					buttons: 
					{
						Ok: function() 
						{
							$j(this).dialog('close');
						}
					}
				}
			);

			$dialog.dialog('open');
		},		
		
		trackEvent : function(selector, selected_value, search_id)
		{
			pageTracker._trackEvent('Search '+ search_id + ' modification', selector, selected_value);
		},
		
		topPerso : function()
		{
			new Effect.toggle($('top_perso_select_opened'), 'slide', {duration:0.5});
			
			pageTracker._trackEvent('Top perso', 'Open selector');	//ANALYTICS
		},
		
		emptyOnFocus : function(id, defaultValue) 
		{
			if ($(id).value == defaultValue) 
			{
				$(id).value = '';
			}
		},
		
		checkOnBlur : function(id, defaultValue) 
		{
			if($(id).value == '')
			{
				$(id).value = defaultValue;
			} 
		},

		switchForm : function(theid)
		{
			var forms	= $('search_forms').childElements();
		
			forms.each
			(
				function(node)
				{
					if(node.id == theid)
					{
						// display selected search form
						$(node.id).style.display="block";
			
						// highlight selected button
						var change = node.id + '_btn';
						var newstyle = node.id + '_btn_selected';
			
						$(change).className = newstyle;
			
				    } 
					else 
					{ 
						// hide other search forms
						$(node.id).style.display="none";
			
						var change = node.id + '_btn';
						var newstyle = node.id + '_btn';
			
						$(change).className = newstyle;
					}
				}
			); 
		}				
	};

	var CruisesHandlers = 
	{
		initializeDate : function()
		{
			$j('#cruises_depart_date3_date').datepicker
			(
				{
					numberOfMonths	: 3,
					showOn			: 'both', 
					buttonImage		: Request.get('basepath') + '/images/icon_calendar.gif', 
					buttonImageOnly	: true,
					dateFormat		: 'yy/mm/dd',
					minDate			: PHPVars.get('calendar_start_date'),
					onSelect		: CruisesHandlers.changeDateTypeByCalendar
				}
			);
		},
			
		validationForm : function()
		{
			if($('cruises_depart_date3_date').value == '' && $('cruises_depart_type3').checked == true)
			{
				GlobalHandlers.showErrorForm(PHPVars.get('common.form_error'), PHPVars.get('common.no_return_date'));
				return false;
			} 
			else
			{
				return true;
			}
		},
		
		changeDateTypeByCalendar : function()
		{
			$j('#cruises_depart_type3').attr('checked', true);
		},
	
		changeDateTypeByMonth : function()
		{
			$j('#cruises_depart_type2').attr('checked', true);
		},
		
		updateCruiseParameters : function()
		{
			var cruise_price_range = $('cruises_pricerange').value;
			var cruise_dates_type = CruisesHandlers._getCheckedValue(document.forms['SearchCruisesForm'].elements['cruises_depart_type']);
	
			if (cruise_dates_type == 2)
			{
				$('cruise_date_dep').value = $('cruises_depart_type2_date').value;
				$('cruise_date_dep_type').value = 'month';
	
			} 
			else if (cruise_dates_type == 3) 
			{
				var departure_date = $('cruises_depart_date3_date').value;
				
				$('cruise_date_dep').value = departure_date.replace(/\//gi, "");	
				$('cruise_date_dep_type').value = departure_date.replace(/\//gi, "");	
			}
	
			/*
			 * There is a problem, these input fields are missing in the template form
			 */
			//cruise_price_range = cruise_price_range.split(" ");
			//$('cruise_price_min').value = cruise_price_range[0];
			//$('cruise_price_max').value = cruise_price_range[1];
		},
		
		apiUpdateDestinations : function()
		{
			var code 				= this[this.selectedIndex].value;
			var url_update_cruises 	= Request.get('basepath') + '/' + Request.get('lang') + '/jsui/api_update_cruise_destinations/'+ code;
			
			new Ajax.Request
			(
				url_update_cruises,
				{
					method : 'get',
					
					onCreate: function()
					{
						var container 					= $('cruises_destinations');
						var containerLoading 			= $('cruises_destinations_loading');
		
						container.style.display 		= 'none';
						containerLoading.style.display 	= 'block';
					},
					
					onSuccess: function(transport)
					{
					 	var response 					= transport.responseText;
						var dest 						= $('cruises_destinations');
					 	dest.update(response);
		
						var container 					= $('cruises_destinations');
						var containerLoading 			= $('cruises_destinations_loading');
		
						containerLoading.style.display 	= 'none';
						container.style.display 		= 'block';
					},
					
					onFailure: function()
					{ 
						alert('Something went wrong...');
					}
				}
			);
		},
		
		_getCheckedValue : function(radioObj) 
		{
			if(!radioObj)
			{									
				return false;
			}
	
			var radioLength = radioObj.length;
	
			if(radioLength == undefined)
			{
				if(radioObj.checked)
				{
					return radioObj.value;										
				}
				else
				{
					return false;																			
				}
			}
	
			for(var i = 0; i < radioLength; i++) 
			{
				if(radioObj[i].checked) 
				{
					return radioObj[i].value;
				}
			}
			
			return false;
		}	
	};
	
	var PackagesHandlers = 
	{		
		validationForm : function()
		{
			if($('packages_departure_date').value == '')
			{
				GlobalHandlers.showErrorForm(PHPVars.get('common.form_error'), PHPVars.get('common.no_departure_date'));
				return false;
			} 
			else
			{
				return true;
			}
		},
		
		Stars : 
		{
			IMAGE_DIRECTORY 	: 'http://img.net-v.ca/content/NTV/images',
			IMAGE_FULL 			: 'icon_star_full.gif',
			IMAGE_EMPTY 		: 'icon_star_empty.gif',
			IMG_PREFIX 			: 'left_search_star_',
			HIDDEN_INPUT 		: 'minimum_hotels_rating',
			IMAGES_CONTAINER 	: 'left_search_packages_rating_container',
			
			initialize : function()
			{
				for(var x = 1; x < 6; x++)
				{
					// Initialize all stars to empty
					var currentStarPackage 		= $(PackagesHandlers.Stars.IMG_PREFIX + x);
									

					currentStarPackage.observe('click', PackagesHandlers.Stars.clickHandler);
					currentStarPackage.observe('mouseover', PackagesHandlers.Stars.overHandler);					
				}	
				
				PackagesHandlers.Stars._assignImages($('minimum_hotels_rating').value);
				$(PackagesHandlers.Stars.HIDDEN_INPUT).observe('mouseout', PackagesHandlers.Stars.outHandler);
			},
			
			_assignImages : function(minimumStar)
			{
				for(var i = 1; i < 6; i++)
				{
					if(i <= minimumStar)
					{
						$(PackagesHandlers.Stars.IMG_PREFIX + i).src = PackagesHandlers.Stars.IMAGE_DIRECTORY + '/' + PackagesHandlers.Stars.IMAGE_FULL;
					}
					else
					{
						$(PackagesHandlers.Stars.IMG_PREFIX + i).src = PackagesHandlers.Stars.IMAGE_DIRECTORY + '/' + PackagesHandlers.Stars.IMAGE_EMPTY;
					}
				}				
			},
			
			outHandler : function()
			{
				PackagesHandlers.Stars._assignImages($(PackagesHandlers.Stars.HIDDEN_INPUT).value);
			},
			
			overHandler : function()
			{
				var length 			= this.id.length;
				var currentRating 	= 1 * (this.id.substr((length -1), 1));
			
				PackagesHandlers.Stars._assignImages(currentRating);
			},
			
			clickHandler : function()
			{
				var length 				= this.id.length;
				var currentRating 		= 1 * (this.id.substr((length -1), 1));
				$(PackagesHandlers.Stars.HIDDEN_INPUT).value = currentRating;				
			}
		},
		
		initializeDate : function()
		{
			$j("#packages_departure_date").datepicker
			(
				{
					numberOfMonths	: 3,
					showOn			: 'both', 
					buttonImage		: Request.get('basepath') + '/images/icon_calendar.gif', 
					buttonImageOnly	: true,
					dateFormat		: 'yy/mm/dd',
					minDate			: PHPVars.get('calendar_start_date')
				}
			);
		},
		
		apiUpdateHotels : function()
		{
			var code = this[this.selectedIndex].value;
			var classe = this[this.selectedIndex].className;
		
			if (classe != '') 
			{			
				var hotels = $('packages_hotels');
				
				if (Request.get('lang') == 'fr') 
				{
					hotels.update('<option value="">Tous les hotels</option>');
				} 
				else 
				{
					hotels.update('<option value="">All hotels</option>');
				}			
			}
			else 
			{			
				var url_update_hotels = Request.get('basepath') + '/' + Request.get('lang') + '/jsui/api_update_hotels/' + code;
				
				new Ajax.Request
				(
					url_update_hotels, 
					{
						method: 'get',
						onCreate: function()
						{
							var container 					= $('packages_hotels');
							var containerLoading 			= $('packages_hotels_loading');
							container.style.display		 	= 'none';
							containerLoading.style.display 	= 'block';
						},
						onSuccess: function(t)
						{
							var container 					= $('packages_hotels');
							var containerLoading 			= $('packages_hotels_loading');
							containerLoading.style.display 	= 'none';
							container.style.display 		= 'block';
							
							var response 					= t.responseText;
							var hotels 						= $('packages_hotels');
							hotels.update(response);
						},
						onFailure: function()
						{
							alert('Something went wrong...');
						}
					}
				);
			}
		},	
		
		apiUpdateDestinations : function()
		{			
			var code = this[this.selectedIndex].value;

			var url_update_destinations = Request.get('basepath') + '/' + Request.get('lang') + '/jsui/api_update_destinations/' + code;
			
			new Ajax.Request
			(
				url_update_destinations,
				{
					method:'get',
					onCreate: function()
					{
						var container 					= $('lastminute_destination');
						var containerLoading 			= $('lastminute_destination_loading');
						container.style.display 		= 'none';
						containerLoading.style.display 	= 'block';
						
						var container 					= $('lastminute_hotels');
						var containerLoading 			= $('lastminute_hotels_loading');
						container.style.display 		= 'none';
						containerLoading.style.display 	= 'block';
					},
					onSuccess: function(transport)
					{
					 	var response 					= transport.responseText;
					  	var dest 						= $('lastminute_destination');
					 	dest.update(response);
					 	
					 	var container 					= $('lastminute_destination');
						var containerLoading 			= $('lastminute_destination_loading');
						containerLoading.style.display 	= 'none';
						container.style.display 		= 'block';
						
						var container 					= $('lastminute_hotels');
						var containerLoading 			= $('lastminute_hotels_loading');
						containerLoading.style.display 	= 'none';
						container.style.display 		= 'block';
						
						var hotels = $('lastminute_hotels');
						
						if (Request.get('lang') == 'fr') 
						{
							hotels.update('<option value="">Tous les hotels</option>');
						} 
						else 
						{
							hotels.update('<option value="">All hotels</option>');
						}				   
					},
					
					onFailure: function()
					{ 
						alert('Something went wrong...');
					}
				}
			);			
		}
	};
	
	var LastMinuteHandlers = 
	{
		initializeDate : function()
		{
			$j("#lastminute_departure_date").datepicker
			(
				{
					numberOfMonths: 1,
					showOn: 'both', 
					buttonImage: Request.get('basepath') + '/images/icon_calendar.gif', 
					buttonImageOnly: true,
					dateFormat: 'yy/mm/dd',
					minDate: PHPVars.get('calendar_start_date'),
					maxDate: '+3w'							
				}
			);					
		},			
		
		validationForm : function()
		{													
			if($('lastminute_departure_date').value == '')
			{
				GlobalHandlers.showErrorForm(PHPVars.get('common.form_error'), PHPVars.get('common.no_departure_date'));
				return false;
			} 
			else
			{
				return true;
			}			
		},
		
		Stars : 
		{
			IMAGE_DIRECTORY 	: 'http://img.net-v.ca/content/NTV/images',
			IMAGE_FULL 			: 'icon_star_full.gif',
			IMAGE_EMPTY 		: 'icon_star_empty.gif',
			IMG_PREFIX 			: 'last_minute_left_search_star_',
			HIDDEN_INPUT 		: 'lastminute_minimum_hotels_rating',
			IMAGES_CONTAINER 	: 'left_search_lastminute_rating_container',
			
			initialize : function()
			{
				for(var x = 1; x < 6; x++)
				{
					// Initialize all stars to empty
					var currentStarPackage 		= $(LastMinuteHandlers.Stars.IMG_PREFIX + x);									

					currentStarPackage.observe('click', LastMinuteHandlers.Stars.clickHandler);
					currentStarPackage.observe('mouseover', LastMinuteHandlers.Stars.overHandler);					
				}	
				
				LastMinuteHandlers.Stars._assignImages($('minimum_hotels_rating').value);
				$(LastMinuteHandlers.Stars.HIDDEN_INPUT).observe('mouseout', LastMinuteHandlers.Stars.outHandler);
			},						
			
			_assignImages : function(minimumStar)
			{
				for(var i = 1; i < 6; i++)
				{
					if(i <= minimumStar)
					{
						$(LastMinuteHandlers.Stars.IMG_PREFIX + i).src = LastMinuteHandlers.Stars.IMAGE_DIRECTORY + '/' + LastMinuteHandlers.Stars.IMAGE_FULL;
					}
					else
					{
						$(LastMinuteHandlers.Stars.IMG_PREFIX + i).src = LastMinuteHandlers.Stars.IMAGE_DIRECTORY + '/' + LastMinuteHandlers.Stars.IMAGE_EMPTY;
					}
				}				
			},
			
			outHandler : function()
			{
				LastMinuteHandlers.Stars._assignImages($(LastMinuteHandlers.Stars.HIDDEN_INPUT).value);
			},
			
			overHandler : function()
			{
				var length 			= this.id.length;
				var currentRating 	= 1 * (this.id.substr((length -1), 1));
			
				LastMinuteHandlers.Stars._assignImages(currentRating);
			},
			
			clickHandler : function()
			{
				var length 				= this.id.length;
				var currentRating 		= 1 * (this.id.substr((length -1), 1));
				$(LastMinuteHandlers.Stars.HIDDEN_INPUT).value = currentRating;				
			}
		},
			
		apiUpdateHotels : function()
		{
			var codes 	= this[this.selectedIndex].value;
			var classe 	= this[this.selectedIndex].className;
		
			if (classe != '') 
			{			
				var hotels = $('lastminute_hotels');
				
				if (Request.get('lang') == 'fr') 
				{
					hotels.update('<option value="">Tous les hotels</option>');
				} 
				else 
				{
					hotels.update('<option value="">All hotels</option>');
				}				
			}
			else 
			{			
				var url_update_hotels = Request.get('basepath') + '/' + Request.get('lang') + '/jsui/api_update_hotels/' + codes;
				
				new Ajax.Request
				(
					url_update_hotels, 
					{
						method: 'get',
						onCreate: function()
						{
							var container 					= $('lastminute_hotels');
							var containerLoading 			= $('lastminute_hotels_loading');
							container.style.display 		= 'none';
							containerLoading.style.display	= 'block';
						},
						onSuccess: function(t)
						{
							var container 					= $('lastminute_hotels');
							var containerLoading 			= $('lastminute_hotels_loading');
							containerLoading.style.display 	= 'none';
							container.style.display 		= 'block';
		
							var response 					= t.responseText;
							var hotels 						= $('lastminute_hotels');
							hotels.update(response);
						},
						
						onFailure: function()
						{
							alert('Something went wrong...');
						}
					}
				);
			}
		}
	};
	
	var FlightsHandlers = 
	{
		displayReturn : function(showReturn)
		{
			$('left_search_flights_return').style.display = (showReturn) ? 'block' : 'none';
		},
		
		initializeDate : function()
		{
			$j("#flights_departure_date, #flights_return_date")
				.datepicker
				(
					{
				        numberOfMonths		: 3,
				        showButtonPanel		: true,
				        beforeShow			: FlightsHandlers.customRange,
				        dateFormat			: 'yy/mm/dd',
				        showOn				: 'both',
				        buttonImage			: Request.get('basepath') + '/images/icon_calendar.gif',
				        buttonImageOnly		: true
					}
				)
			;
		},
		
		validationForm : function()
		{
			var errorsMessage = Array();
			
			if($('flights_to_city').value == '')
			{
				errorsMessage.push(PHPVars.get('common.no_to_city'));
			}

			// check departue date
			if($('flights_departure_date').value == '')
			{
				errorsMessage.push(PHPVars.get('common.no_departure_date'));
			}

			// check arrival date
			if($('flights_return_date').value == '' && $('flights_roundtrip').checked == true)
			{
				errorsMessage.push(PHPVars.get('common.no_return_date'));
			}
			
			if(errorsMessage.length > 0)
			{
				GlobalHandlers.showErrorForm(PHPVars.get('common.form_error'), errorsMessage.join('<br/>'));
				return false;
			}
			else
			{
				return true;
			}
		},
		
		customRange : function(a) 
		{
		    var b = new Date();
		    var c = new Date(b.getFullYear(), b.getMonth(), b.getDate());
		    
		    if (a.id == 'flights_return_date') 
		    {
		        if ($j('#flights_departure_date').datepicker('getDate') != null) 
		        {
		           var c = $j('#flights_departure_date').datepicker('getDate');
		        }
		    }
		    
		    return {
		        minDate : c
		    }
		},								
		
		updateFlightsDates : function()
		{
			// convert date format
			var departure_date = $('flights_departure_date').value;
			$('flights_date_dep').value = departure_date.replace(/\//gi, "");

			// convert date format
			var return_date = $('flights_return_date').value;
			$('flights_date_ret').value = return_date.replace(/\//gi, "");
			
			if($("flight_destination_autocomplete_value").value == '')
			{
				$("flight_destination_autocomplete_value").value = $("flights_to_city").value;
			}
		},
		
		autocomplete : function()
		{
			$j("#flights_to_city")
				.autocomplete
				(
					Request.get('basepath') + '/' + Request.get('lang') + '/jsui/api_suggest_destinations', 
					{
						delay			: 10,
						minChars		: 3,
						matchSubset		: 1,
						autoFill		: true,
						matchContains	: 1,
						cacheLength		: 10,
						selectFirst		: true,
						formatItem		: FlightsHandlers.liFormat,
						maxItemsToShow	: 10,
						onItemSelect	: FlightsHandlers.selectItem
					}
				)
			; 
		},
		
		liFormat : function(row, i, num) 
		{
		  	return row[0];
		},

		selectItem : function(li) 
		{
			if( !!li.extra )
			{ 
				var sValue = li.extra[2];
			} 
			else 
			{
				var sValue = li.selectValue;
			}

			$j("#flight_destination_autocomplete_value").val(sValue);
		}
	};
	
	var TeasersHandlers = 
	{
		rotate : function()
		{
			var teaser_id = 1;
			var i = 0;
			
			while (i < 999) // loop forever! ;-)
			{
				setTimeout("TeasersHandlers.leftTeasers(" + teaser_id + ")", 15000 * i);
				
				if(teaser_id == 3) 
				{
					teaser_id = 1;
				}
				else
				{
					teaser_id = teaser_id + 1;
				}
		
				i = i +1;	
			}
		},
			
		leftTeasers : function(teaser_id)  
		{			
			if ($('left_teasers_pix1').style.display == "block")
			{
				var current_teaser = $('left_teasers_pix1'); 
			
			} 
			else if ($('left_teasers_pix2').style.display == "block") 
			{ 			
				var current_teaser = $('left_teasers_pix2');
			
			} 
			else 
			{				
				var current_teaser = $('left_teasers_pix3');				
			} 
				
			if (teaser_id == 2)
			{
				$('left_teasers_tabs_disable').style.width = "256px";
				$('left_teasers_tabs_disable').style.height = "19px";
		
				new Effect.toggle(current_teaser, 'Appear', {duration:0.5});
			
				$('left_teasers_tab1').style.backgroundPosition = "0px -19px";
				$('left_teasers_tab2').style.backgroundPosition = "-37px -19px";
				$('left_teasers_tab3').style.backgroundPosition = "-77px -19px";
		
				setTimeout
				(
					function()
					{
						new Effect.toggle($('left_teasers_pix2'), 'Appear', {duration:0.5});
					},
					550
				);
				
				setTimeout
				(
					function()
					{
						$('left_teasers_tabs_disable').style.width = "0px";
						$('left_teasers_tabs_disable').style.height = "0px";
						$('left_teasers_pix1').style.display = "none";
						$('left_teasers_pix2').style.display = "block";
						$('left_teasers_pix3').style.display = "none";
					},
					1200
				);
				
				return false;
			}
		
			else if (teaser_id == 3)
			{
				$('left_teasers_tabs_disable').style.width = "256px";
				$('left_teasers_tabs_disable').style.height = "19px";
				
				new Effect.toggle(current_teaser, 'Appear', {duration:0.5});
				
				$('left_teasers_tab1').style.backgroundPosition = "0px -39px";
				$('left_teasers_tab2').style.backgroundPosition = "-37px -39px";
				$('left_teasers_tab3').style.backgroundPosition = "-77px -39px";
				
				setTimeout
				(
					function()
					{
						new Effect.toggle($('left_teasers_pix3'), 'Appear', {duration:0.5});
					},
					550
				);
				
				setTimeout
				(
					function()
					{
						$('left_teasers_tabs_disable').style.width = "0px";
						$('left_teasers_tabs_disable').style.height = "0px";
						$('left_teasers_pix1').style.display = "none";
						$('left_teasers_pix2').style.display = "none";
						$('left_teasers_pix3').style.display = "block";
					},
					1200
				);
				
				return false;
			}
			
			else if(teaser_id == 1)
			{
				$('left_teasers_tabs_disable').style.width = "256px";
				$('left_teasers_tabs_disable').style.height = "19px";
				
				new Effect.toggle(current_teaser, 'Appear', {duration:0.5});
				
				$('left_teasers_tab1').style.backgroundPosition = "0px 0px";
				$('left_teasers_tab2').style.backgroundPosition = "-37px 0px";
				$('left_teasers_tab3').style.backgroundPosition = "-77px 0px";
				
				setTimeout
				(
					function()
					{
						new Effect.toggle($('left_teasers_pix1'), 'Appear', {duration:0.5});
					},
					550
				);
				
				setTimeout
				(
					function()
					{
						$('left_teasers_tabs_disable').style.width = "0px";
						$('left_teasers_tabs_disable').style.height = "0px";
						$('left_teasers_pix1').style.display = "block";
						$('left_teasers_pix2').style.display = "none";
						$('left_teasers_pix3').style.display = "none";
					},
					1200
				);
				
				return false;
			}
		}	
	};