/* Dispay JSON object */

// boolean to test if page visited or not
var visit = false;
// jJSON Object  */
var jJSON = {};
 
var displayBlocFilter = {
	
	linkJson: "",
	bloc_filter_themes: "",
	bloc_filter_countries: "",
	bloc_filter_cities: "default",
	bloc_filter_budgets: "",
	bloc_filter_date: "",
	typeSelect: "",
	tabBudget: null,

	
	
	// call methode and init vars
	init : function(){
		this.tabBudget =new Array();
		this.linkJson = JSONfilter;
		this.getJson();
		this.initDatePicker();
		this.toggleLinkMore();
		this.submitSearchBlock();
		this.testDestinations();
	},
	
	/* JSON parser with a call to the JSON object file and show data form*/	
	getJson : function(){

		if(displayBlocFilter.linkJson){
			
			jQuery.getJSON(displayBlocFilter.linkJson, function(json) { 
			
			if(jQuery.cookie('packageCookie')){ // test if there cookie value stored
				// decode args from cookies
				criteria = fillDate.getSearchArgs(jQuery.cookie('packageCookie'));
				
				//init selects and inputs from data stored in cookies
				displayBlocFilter.bloc_filter_themes = criteria['theme'];
				displayBlocFilter.bloc_filter_countries = criteria['country'];
				displayBlocFilter.bloc_filter_cities = criteria['city']?criteria['city']:'default';

				if(criteria['min-budget'] && criteria['max-budget']){
					displayBlocFilter.bloc_filter_budgets = criteria['min-budget']+'-'+criteria['max-budget'];
				}else{
					displayBlocFilter.bloc_filter_budgets = "";
				}
				if(criteria['day'] && criteria['month']&& criteria['year']){
			 	 if (jQuery("html").attr("lang")=="de") {
						displayBlocFilter.bloc_filter_date = criteria['day']+'.'+criteria['month']+'.'+criteria['year'];
					}
					else if ((jQuery("html").attr("lang")=="ja")||(jQuery("html").attr("lang")=="zh-CN")) {						
						displayBlocFilter.bloc_filter_date = criteria['year']+'-'+criteria['month']+'-'+criteria['day'];
					}	
					else {						
						displayBlocFilter.bloc_filter_date = criteria['day']+'/'+criteria['month']+'/'+criteria['year'];
					}
				}else{
					displayBlocFilter.bloc_filter_date = "";
				}
			}
		
			/* Return a number of values for a given object  */
			// store pack-nb in object jJSON
			jJSON["pack-nb"] = (function() {
				response = json['search-block']["pack-nb"];
				return response;
			})();
			
			// store theme-lib in object jJSON
			jJSON["theme-lib"] = (function() {
				response = json['search-block']["theme-lib"];
				return response;
			})();
			
			// store country-lib in object jJSON
			jJSON["country-lib"] = (function() {
				response = json['search-block']["country-lib"];
				return response;
			})();
			
			// store city-lib in object jJSON
			jJSON["city-lib"] = (function() {				
				response = json['search-block']["city-lib"];
				return response;
			})();
			
			// store budget-lib in object jJSON if budget exist
			if(json['search-block']["budget-lib"]){
				jJSON["budget-lib"] = (function() {
					response = json['search-block']["budget-lib"];
					return response;
				})();
			}
			
			// store def-lib-city in object jJSON
			jJSON["def-lib-city"] = (function() {
				response = json['search-block']["def-lib-city"];
				return response;
			})();
			
			// store cur in object jJSON
			jJSON["cur"] = (function() {
				response = json['search-block']["cur"];
				return response;
			})();
			
			// store themes in object jJSON
			jJSON["themes"] = (function() {
				response = {
					value: [],
					name: []
				};
				
				jQuery.each(json['search-block']['search-eng'],function(i,item) {
					if (item.themes != "undefined" ) {
						jQuery.each(item.themes,function(j,itempush) {
							response.value[j] = itempush.id;
							response.name[j] = itempush.name;												
						});
					}
				});
				return response;
			})();
			
			// store contries in object jJSON
			jJSON["country"] = (function() {
				response = {
					value: [],
					name: []
				};
				jQuery.each(json['search-block']['search-eng'],function(i,item) {
					if (item.themes != "undefined" ) {
						jQuery.each(item.countries,function(j,item2) {
							response.value[j] = item2.id;
							response.name[j] = item2.name;												
						});
					}
				});
				return response;
			})();
			
			// store cities in object jJSON
			jJSON["city"] = (function() {
				response = {
					value: [],
					name: [],
					geo: []
				};
				jQuery.each(json['search-block']['search-eng'],function(i,item) {
					if (item.cities != "undefined" ) {
						jQuery.each(item.cities,function(j,item2) {
							response.value[j] = item2.id;
							response.name[j] = item2.name;	
							response.geo[j] = item2.geo;		
						});
					}
				});
				return response;
			})();
			
			// store budgets in object jJSON
			jJSON["budget"] = (function() {
				response = {
					min: [],
					max: []
				};
				jQuery.each(json['search-block']['search-eng'],function(i,item) {
					if (item.budget && item.budget != "undefined" ) {
						jQuery.each(item.budget,function(j,item2) {
							response.min[j] = item2['min-amount'];
							response.max[j] = item2['max-amount'];												
						});
					}
				});
				
				if(response.min.length > 0 && response.max.length > 0){
					return response;
				}
			})();
	

			/* show data streams */
			var displayDiv = jQuery(".selects");
			var dumpP;
			var str = '';
			
			// insert date value form bloc_filter_date
			jQuery('#arrival-date').val(displayBlocFilter.bloc_filter_date);
			
			// init html nb paks form json for index page
			if(jJSON["pack-nb"] != undefined){
				jQuery('#engineFilters h2 span').html(jJSON["pack-nb"]);
			}
			
			// build select themes
			if(jJSON["themes"]['value'] != undefined){
				
				str += '<select name="theme" id="bloc_filter_themes">';
				str += '<option value="">'+ jJSON["theme-lib"] + '</option>';
				for(i=0 ; i<jJSON["themes"]['value'].length ; i++){
					str += '<option value="'+ jJSON["themes"]['value'][i] + '"' ;
					if (displayBlocFilter.bloc_filter_themes == jJSON["themes"]['value'][i] ){
						str += ' selected = "selected" ';
					}
					 str += '>'+ jJSON["themes"]['name'][i] + '</option>';
				}
				str += '</select>';
			}
			
			// build select county
			if(jJSON["country"]['value'] != undefined){
				str += '<select name="theme" id="bloc_filter_countries">';
				str += '<option value="">'+ jJSON["country-lib"] + '</option>';
				if(displayBlocFilter.bloc_filter_countries == "" && displayBlocFilter.typeSelect == 'bloc_filter_countries'){
					displayBlocFilter.bloc_filter_cities = "default";
				}
				for(i=0 ; i<jJSON["country"]['value'].length ; i++){
					str += '<option value="'+ jJSON["country"]['value'][i] + '"' ;
					if (displayBlocFilter.bloc_filter_countries == jJSON["country"]['value'][i] ){
						str += ' selected = "selected" ';
					}
					 str += '>'+ jJSON["country"]['name'][i] + '</option>';
				}
				str += '</select>';
			}
			
			// build select city
			if(jJSON["city"]['value'] != undefined){
				country =  displayBlocFilter.bloc_filter_countries;

				str += '<select name="theme" id="bloc_filter_cities">';
				if(!country){	
					str += '<option value="">'+ jJSON["city-lib"] + '</option>';
					str += '<option value="">'+ jJSON["def-lib-city"] + '</option>';
				}else{
					str += '<option value="">'+ jJSON["city-lib"] + '</option>';
				}		
				
				if(country){
					for(i=0 ; i<jJSON["city"]['value'].length ; i++){
						
						if(country){ // get cities of country selected							
							if(jJSON["city"]['geo'][i] == country  ){
									str += '<option value="'+ jJSON["city"]['value'][i] + '"' ;
									if (displayBlocFilter.bloc_filter_cities == jJSON["city"]['value'][i] ){
										str += ' selected = "selected" ';
									}
									 str += '>'+ jJSON["city"]['name'][i] + '</option>';
							}
						}
					}
				}
				
				str += '</select>';
		
			}
			
			// build select budget
			if(jJSON["budget"] && jJSON["budget"] != undefined){

				str += '<select name="theme" id="bloc_filter_budgets">';
				str += '<option value="">'+ jJSON["budget-lib"] + '</option>';
				for(i=0 ; i<jJSON["budget"]['min'].length ; i++){
					// cases of html option 
					if(i==0){
						var min ='< ';
						max_round = Math.round(Number(jJSON["budget"]['max'][i]));
						max_round = Math.floor((max_round+5)/10)*10;
						var max = '<span class="amount">'+max_round+'</span>';	
					}else if (i== jJSON["budget"]['min'].length-1){
						var min = '>' ;
						min_round = Math.round(Number(jJSON["budget"]['min'][i]));
						min_round = Math.floor((max_round+5)/10)*10;
						var max = '<span class="amount">'+min_round+'</span>';	
					}else{
						max_round = Math.round(Number(jJSON["budget"]['max'][i]));
						max_round = Math.floor((max_round+5)/10)*10;
						
						min_round = Math.round(Number(jJSON["budget"]['min'][i]));
						min_round = Math.floor((min_round+5)/10)*10;
						
						var min = '<span class="amount">'+min_round +'</span>-';
						var max = '<span class="amount">'+max_round+'</span>';							
					}
					
					str += '<option value="'+ jJSON["budget"]['min'][i] +'-'+ jJSON["budget"]['max'][i] +'"';
					
					if (displayBlocFilter.bloc_filter_budgets == jJSON["budget"]['min'][i]+'-'+jJSON["budget"]['max'][i] ){
						str += ' selected = "selected" ';
					}

					str += '>'+  min + max  + '  <span class="currency">' +jJSON["cur"] + '</span></option>';
				}
				str += '</select>';
				str += '<input type="hidden" value="'+ jJSON["cur"] +'" name="" id="budgetCurrency" />';
			}

			displayDiv.html(str);
			displayBlocFilter.tabBudget =jJSON["budget"];


			jQuery('select#bloc_filter_cities, select#bloc_filter_countries ').change(function(){	
																			  
				displayBlocFilter.typeSelect = jQuery(this).attr('id');//id of selector			
				displayBlocFilter.bloc_filter_cities = jQuery('select#bloc_filter_cities').val();
				displayBlocFilter.bloc_filter_budgets = jQuery('select#bloc_filter_budgets').val();
				
				if(jJSON["city"]['value'] != undefined){
					country =   jQuery('select#bloc_filter_countries').val();
	
					var str = "";
					
					if(!country){	
						str += '<option value="">'+ jJSON["city-lib"] + '</option>';
						str += '<option value="">'+ jJSON["def-lib-city"] + '</option>';
					}else{
						str += '<option value="">'+ jJSON["city-lib"] + '</option>';
					}					
			
					for(i=0 ; i<jJSON["city"]['value'].length ; i++){
						
						if(country){ // get cities of country selected							
							if(jJSON["city"]['geo'][i] == country  ){
									str += '<option value="'+ jJSON["city"]['value'][i] + '"' ;
									if (displayBlocFilter.bloc_filter_cities == jJSON["city"]['value'][i] ){
										str += ' selected = "selected" ';
									}
									 str += '>'+ jJSON["city"]['name'][i] + '</option>';
							}
						}
					}
					
					jQuery('#bloc_filter_cities').html(str);
					
			
				}

			});	
		
    });
	}
  },
  
  // test format date
  engineTestFormatDate : function(date){
	  // coverte date now in time
	  var dateNow = new Date();	  	 
				
		if (jQuery("html").attr("lang")=="de") {
			var dateDate = fillDate.correctDate(dateNow.getDate())+"."+fillDate.correctDate(dateNow.getMonth()+1)+"."+dateNow.getFullYear();			
			// date now coverted in time
			var dateNowConv = fillDate.convertDate(dateDate);
			// convert date selected in time
			var datePickEngine = fillDate.convertDate(date);			
			// format of date  
			var reg = new  RegExp(i18n.calendar.dateFormat);			
			var tabDpick = date.split('.');
		}
		else if ((jQuery("html").attr("lang")=="ja")||(jQuery("html").attr("lang")=="zh-CN")) {		
			var dateDate = fillDate.correctDate(dateNow.getDate())+"-"+fillDate.correctDate(dateNow.getMonth()+1)+"-"+dateNow.getFullYear();		
			// date now coverted in time
			var dateNowConv = fillDate.convertDate(dateDate);
			// convert date selected in time
			var datePickEngine = fillDate.convertDate(date);		
			// format of date  
			var reg = new  RegExp(i18n.calendar.dateFormat);	
			var tabDpick = date.split('/');
		}
		else {
			var dateDate = fillDate.correctDate(dateNow.getDate())+"/"+fillDate.correctDate(dateNow.getMonth()+1)+"/"+dateNow.getFullYear();			
					// date now coverted in time
			var dateNowConv = fillDate.convertDate(dateDate);
					// convert date selected in time
			var datePickEngine = fillDate.convertDate(date);			
					// format of date  
			var reg = new  RegExp(i18n.calendar.dateFormat);
		
			var tabDpick = date.split('/');
		}
					
		// return if year is bissextile
		if (tabDpick[2]%4==0 && tabDpick[2] %100!=0 || tabDpick[2]%400==0) {
			var dpick_Biss = 29;
		}else{
			var dpick_Biss= 28;
		}
		// tab nbr day for each mounth
		var tabMounthspick = new Array(31,dpick_Biss,31,30,31,30,31,31,30,31,30,31);
		
		// correct fommat of day
		if( parseInt(tabDpick[0]) < 10){
			tabDpick[0] = tabDpick[0].substring(1, 2);			
		}
		// correct fommat of mounth
		if( parseInt(tabDpick[1]) < 10){
			tabDpick[1] = tabDpick[1].substring(1, 2);
		}
		
		// test if format of date inserted is correct
		if (!reg.test(date)) { // if wrong format display error 						
			return i18n.calendar.error;
		} else if (datePickEngine<dateNowConv) {
			return i18n.calendar.errorDate;			
		} else if(parseInt(tabDpick[0]) > tabMounthspick[parseInt(tabDpick[1]-1)] || parseInt(tabDpick[0]) <= 0  || tabDpick[1]<= 0 || tabDpick[2] <= 0 || parseInt(tabDpick[1]) >12){// if wrong nbr of day/mounth/year display error
			return i18n.calendar.error;
		}
	}, 
	
  // methode to display error message
  engineDisplayMessage : function(date, selector){
		if(date){// if there date 
			// test format of date
			testFormat = displayBlocFilter.engineTestFormatDate(date);
			if(testFormat){// if error returned build html error msg 
				selector.css('border','1px solid red');
				var html = '<div class="errorMessage validatorInvalidState tErrorMessage">'+testFormat+'</div>';

				if(jQuery('#engineFilters .errorMessage').html() != null){
					jQuery('#engineFilters .errorMessage').html(testFormat);
				}else{
					jQuery('#engineFilters').prepend(html);
					jQuery('#engineFilters .errorMessage').before(jQuery('#engineFilters h2'));
				}
				
			}else{// remove html error msg and styles if no error format
				jQuery('#engineFilters .validatorInvalidState').remove();
				selector.removeAttr('style');
			}
			
		}else{
			selector.removeAttr('style');
			jQuery('#engineFilters .validatorInvalidState').remove();	
		}
	},
  
  // DatePicker
  initDatePicker : function(){
	 jQuery("#bloc-filter .date-pick").datepicker({
		showOn: 'button', // in the input box displayed next to the button is triggered
		buttonImage: '/imagerie/commun/pictos/calendrier.gif', // button icons
		buttonImageOnly: true, // not to icons displayed on the button, that is, remove the button
		buttonText: 'Select date',
		minDate:new Date (),// default date is Now
		defaultDate: false,
		onSelect: function(dateText, inst) { 
			displayBlocFilter.engineDisplayMessage(dateText, jQuery('#engineFilters #arrival-date'));
		}
	}); 
	 jQuery('#ui-datepicker-div').wrap('<div class="ui-datepicker-wrapper"></div>');
  }, 
  
  // toggle action in description bloc in page detail package
  toggleLinkMore : function(){
	 	jQuery('.linksToggle a').click(function(){
	 	jQuery('.linksToggle a').slideToggle(); 
		jQuery('.textIntro').toggle();
	 	jQuery('.textMore').slideToggle();
	 	return false;
	 });
  },
  
  setSearchArgs: function() {
	// display error msg if wrong date format											  
	displayBlocFilter.engineDisplayMessage(jQuery('#engineFilters #arrival-date').val(), jQuery('#engineFilters #arrival-date'));
	// if not errors
	if(!jQuery('#engineFilters .errorMessage').html() ){

		var arg = new Array();										  
		var url = jQuery('form#bloc-filter').attr('action');
					
		// insert in table arg the selected criteria form bloc filter
		if( jQuery('select#bloc_filter_themes').val()){
			arg.push('theme='+ jQuery('select#bloc_filter_themes').val());
		}
		if( jQuery('select#bloc_filter_countries').val()){
			arg.push( 'country='+ jQuery('select#bloc_filter_countries').val());
		}
		if( jQuery('select#bloc_filter_cities').val()){
			arg.push('city='+ jQuery('select#bloc_filter_cities').val());
		}
		if( jQuery('select#bloc_filter_budgets').val()){
			var tab_budget = jQuery('select#bloc_filter_budgets').val().split('-');
			arg.push( 'min-budget='+ tab_budget[0]);
			arg.push( 'max-budget='+ tab_budget[1]);
		}
		if( jQuery('#arrival-date').val()){
		
		if (jQuery("html").attr("lang")=="de") {			
			var tab_date = jQuery('#arrival-date').val().split('.');						
			arg.push( 'year='+ tab_date[2]);
			arg.push( 'month='+ tab_date[1]);
			arg.push( 'day='+ tab_date[0]);
		}
		else if ((jQuery("html").attr("lang")=="ja")||(jQuery("html").attr("lang")=="zh-CN")) {			
			var tab_date = jQuery('#arrival-date').val().split('-');						
			arg.push( 'year='+ tab_date[0]);
			arg.push( 'month='+ tab_date[1]);
			arg.push( 'day='+ tab_date[2]);
		}		
		else {		
			var tab_date = jQuery('#arrival-date').val().split('/');						
			arg.push( 'year='+ tab_date[2]);
			arg.push( 'month='+ tab_date[1]);
			arg.push( 'day='+ tab_date[0]);
		}
	}
		
		//get var stored in cook
		var cook = jQuery.cookie('packageCookie');
		if(cook){
			// decode args from cookies
			criteria = fillDate.getSearchArgs(cook);
			// init id if stored in cookie
			criteria['id'] = criteria['id']?criteria['id']:"";
			// init theme value
			criteria['theme'] = jQuery('select#bloc_filter_themes').val()?jQuery('select#bloc_filter_themes').val():'';
			// init country value
			criteria['country'] =  jQuery('select#bloc_filter_countries').val()?jQuery('select#bloc_filter_countries').val():'';
			// init country value
			criteria['city'] = jQuery('select#bloc_filter_cities').val()?jQuery('select#bloc_filter_cities').val():'';
			// init budget value id exist
			if( jQuery('select#bloc_filter_budgets').val()){
				var tab_budget = jQuery('select#bloc_filter_budgets').val().split('-');
				criteria['min-budget'] = tab_budget[0];
				criteria['max-budget'] = tab_budget[1];
			}else{
				criteria['min-budget'] = "";
				criteria['max-budget'] = "";
			}
			// init date values
			criteria['day'] = arg['day']?arg['day']:"";
			criteria['month'] = arg['month']?arg['month']:"";
			criteria['year'] = arg['year']?arg['year']:"";
			
			if(jQuery('#arrival-date').val()){
				var tab_date = jQuery('#arrival-date').val().split('/');				
				criteria['year'] = tab_date[0];
				criteria['month'] = tab_date[1];
				criteria['day'] = tab_date[2];
			}else{
				criteria['year'] = "";
				criteria['month'] = "";
				criteria['day'] = "";	
			}
			// encode args to store in cookies
			var str = fillDate.setSearchArgs(criteria);
			
		}else{ // if not cookies : submit args and store theme in cookies
			// init values t
			var str = "";
			str += 'id=';
			if( jQuery('select#bloc_filter_themes').val()){
				str += '&theme='+ jQuery('select#bloc_filter_themes').val();
			}else{
				str += '&theme=';
			}
			
			if( jQuery('select#bloc_filter_countries').val()){
				str += '&country='+ jQuery('select#bloc_filter_countries').val();
			}else{
				str += '&country=';
			}
			if( jQuery('select#bloc_filter_cities').val()){
				str += '&city='+ jQuery('select#bloc_filter_cities').val();
			}else{
				str += '&city=';	
			}
			
			// init budget if exist
			if( jQuery('select#bloc_filter_budgets').val()){
				var tab_budget = jQuery('select#bloc_filter_budgets').val().split('-');
				str += '&min-budget='+ tab_budget[0];
				str += '&max-budget='+ tab_budget[1];
			}else{
				str += '&min-budget=';
				str += '&max-budget=';
			}
			// init date
			if(jQuery('#arrival-date').val()){			
				var tab_date = jQuery('#arrival-date').val().split('/');
				str += '&year='+ tab_date[2];
				str += '&month='+ tab_date[1];
				str += '&day='+ tab_date[0];
			}else{
				str += '&year=';
				str += '&month=';
				str += '&day=';	
			}
		}

		// store cookie
		jQuery.cookie('packageCookie', str, {path: '/'});		
		var joinedArgs = arg.join('&');
		if(joinedArgs) {
			url += '#';
		} else {
			url += '';
		}	
		window.location = url + joinedArgs;
	
	}
  },
  
  // action after submit form
  submitSearchBlock : function(){
	jQuery('#bloc-filter .submiter').click(displayBlocFilter.setSearchArgs);
	jQuery('#bloc-filter').submit(displayBlocFilter.setSearchArgs);
 },	

// remove li from bloc destination in page detail package if there no destination
testDestinations : function(){
	if(jQuery("#LinksDestination li").length == 0) jQuery("#LinksDestination").hide();
	}
  
};

// call init methode whene DOM loaded
jQuery(document).ready(function(){ 
	 displayBlocFilter.init();		   
});

  
