var dictionnary = {
	
	'selectCityDefaultValue': {
		'fr' : '-- Sélectionnez une ville --',
		'gb' : '-- Select a city --',
		'de' : '-- Wählen Sie eine Stadt aus --',
		'es' : '-- Selecciona una ciudad --',
		'it' : '-- Seleziona una città --',
		'nl' : '-- Selecteer een stad --',
		'pt-br' : '-- Selecione um cidade --',
		'zh' : '-- 选择一个城市 --',
		'pl' : '-- Wybierz miasto --'
	}
};

var genericBookingEngine = {

	currentLanguage: null,

	init : function(){
		var optionCal = { // objet d'options du calendrier
			pgeCal : null,
			defaultDate: new Date(2011,11,11), 
			firstArrivalDate : null,
			lastArrivalDate :  null,
			minStay : null,
			maxStay : null,
			lastDepartureDate : null,
			earlyBookingCondition : null
		}
	
		genBookingEngine = new BookingEngine("genericBookingEngine", "genBookingEngine", true, optionCal);
		
		// Retrieve current language
		var htmlTag = document.getElementsByTagName("html")[0];
		if(htmlTag.attributes["xml:lang"] && htmlTag.attributes["xml:lang"].value)
			this.currentLanguage = htmlTag.attributes["xml:lang"].value;
		else if(htmlTag.attributes["lang"] && htmlTag.attributes["lang"].value)
			this.currentLanguage = htmlTag.attributes["lang"].value;
			
		if(this.currentLanguage == 'pt'){this.currentLanguage = 'pt-br';}
		
		//Ajax request
		ajaxRequest._executeByUrl(
			"/bean/getViewBeans.action?beans=SearchCriteriaViewBean|OriginViewBean|CurrenciesViewBean",
			"validatorInvalidState", 
			"genBookingEngine.success(errors, response)"
		);
				
		// Implement specific client side input validity control (destination + dates are mandatory for a chouchou booking engine)
		jQuery('.tSubmit').click(function(e) {
			jQuery('#genericBookingEngine').find(".validatorInvalidState").removeClass('validatorInvalidState');
			jQuery('#genericBookingEngine .errorMessage').empty();
			if (jQuery('#genericBookingEngine .tSearchDestination').val() == '' || jQuery('#genericBookingEngine .tSearchDestination').val() == jQuery('#genericBookingEngine .tSearchDestination').attr('title') || jQuery('#genericBookingEngine .tArrivalDate').val() == '' || jQuery('#genericBookingEngine .tDepartureDate').val() == ''){
				e.stopImmediatePropagation();
				jQuery('#genericBookingEngine').find('.errorMessage').show().append(i18n.b2b.error);
				if (jQuery('#genericBookingEngine .tSearchDestination').val() == '' || jQuery('#genericBookingEngine .tSearchDestination').val() == jQuery('#genericBookingEngine .tSearchDestination').attr('title')){
					jQuery('#genericBookingEngine #destination').addClass('validatorInvalidState');
				}
				if(jQuery('#genericBookingEngine .tArrivalDate').val() == '' || jQuery('#genericBookingEngine .tDepartureDate').val() == '') {
					jQuery('#genericBookingEngine #dates-sejour').addClass('validatorInvalidState');
				}
			}
		});	
		
		jQuery('#genericBookingEngine').keyup(function(e) {
			if (e.keyCode == 13) {
				e.stopImmediatePropagation();
				jQuery('.tSubmit').click();
			}
		});
		
		jQuery('#bouton_mentions').click(function(e) {
			jQuery('#texte_mentions').slideToggle(1000);
			return false;
		});	
		
		jQuery('#country').change(function(e) {
		
			if( this.value == '' )
			{
				jQuery('#city').attr('disabled', 'disabled');
				return;
			}
			
			var curL = genericBookingEngine.currentLanguage;
			
			// getting cities codes for selected country
			listeCodes = oCountries[ this.value ].cities;
			
			// cities select list
			citiesList = [];
			jQuery.each
			(
				listeCodes,
				function(index,code)
				{
					citiesList.push({ code : code, nom_ville : oCities[ code ][curL] });
				}
			);
			
			// sorting on cities names
			citiesList.sort
			(
				function(a, b)
				{
					var nameA=a.nom_ville.toLowerCase();
					var nameB=b.nom_ville.toLowerCase();
					if (nameA < nameB)
						return -1
					if (nameA > nameB)
						return 1
					return 0
				}
			);
			
			// empty list
			jQuery('option', jQuery('#city')).remove();
			
			// default option
			jQuery("<option>").attr('value', '').text(dictionnary.selectCityDefaultValue[curL]).appendTo("#city"); 
			
			if(citiesList)
			{
				// options list
				for(var index=0; index < citiesList.length; index++)
				{
					jQuery("<option>").attr('value', citiesList[index]['code']).text(citiesList[index]['nom_ville']).appendTo("#city"); 
				}
				
				jQuery('#city').removeAttr('disabled');
			}
			else
			{
				jQuery('#city').attr('disabled', 'disabled');
				jQuery('#search-destination-gen').attr('value', '');
			}
		});
		
		jQuery('#city').change(function(e) {
			if( this.value == '' )
			{
				jQuery('#search-destination-gen').attr('value', '');
				return;
			}
			jQuery('#search-geoZone-code-gen').attr('value', this.value);
			jQuery('#search-geoZone-type-gen').attr('value', 'VI');
			jQuery('#search-destination-gen').attr('value', jQuery('#city :selected').text() + ', ' + jQuery('#country :selected').text());
		});
		
		setTimeout("initCitiesList()",500);
		
		if (this.currentLanguage=='fr') {
			Criteo.triggerPromoPageHit();
		}
	}
};

function initCitiesList()
{
	// default option
	jQuery('option', jQuery('#city')).remove();
	jQuery("<option>").attr('value', '').text(dictionnary.selectCityDefaultValue[genericBookingEngine.currentLanguage]).appendTo("#city"); 
	jQuery('#city').attr('disabled', 'disabled');
}

/* Initialisation via jquery no conflict */
jQuery(document).ready(function(){
	jQuery.noConflict();
	genericBookingEngine.init();
	utils.tooltips.init();
});


