// initialize jquery
$j = jQuery.noConflict();

// main object
var PD = {};

// tracker
PD.tracker = {
	pageview: function(code) {
		_gaq.push(['_setAccount', '	UA-150262-12']);
		_gaq.push(['_trackPageview', code]);
	}
};

// bestdeals
PD.bestdeals = {
	
	auto: 1,
	
	init: function() {
		var boxes = $j('.pd-box-bestof');
		boxes.each(function (i, box) {
			var id = $j(box).attr('id');
			$j('#'+id+' .pd-deal-menu a')
				.hover(function(a) { PD.bestdeals.change($j(this).attr('id'), id, 0); })
				.click(function(a) { PD.bestdeals.change($j(this).attr('id'), id, 0); });
			PD.bestdeals.run(id, 0);
		});
	},
	
	change: function(id, box, auto) {
		PD.bestdeals.auto = auto;
		
		$j('.'+box+'-infos').each(function(i, e) {
			$j(e).hide();
		});
		$j('#'+id+'-infos').show();

		
		$j('.'+box+'-menu').each(function(i, e) {
			$j(e).removeClass('pd-deal-current');
		});
		$j('#'+id+'-menu').addClass('pd-deal-current');
	},
	
	run: function(id, i) {
		if(1 == PD.bestdeals.auto) {
			PD.bestdeals.change(id+'-'+i, id, 1);		
			window.setTimeout(function () { PD.bestdeals.run(id, (i+1)%5); }, 3000);
		} else {
			window.setTimeout(function () { PD.bestdeals.auto = 1; PD.bestdeals.run(id, (i+1)%5); }, 10000);
		}
	}
	
};

// slideshow
PD.gallery = {

	auto: 1,
	
	init: function() {
		$j('.pd-gallery .pd-mini a').hover(function() {
			var image = $j('#'+$j(this).attr('id')+' img');
			var id = $j('.pd-gallery').attr('id');
			$j('#'+id).css('backgroundImage', 'url('+image.attr('src').replace(/149x93c/, '670x325c')+')');
		});
		$j('.pd-gallery-large .pd-mini a').hover(function() {
			var image = $j('#'+$j(this).attr('id')+' img');
			var id = $j('.pd-gallery-large').attr('id');
			$j('#'+id).css('backgroundImage', 'url('+image.attr('src').replace(/152x103c/, '638x383c')+')');
		});
		
	},
	
	change: function(id, img) {
		
	},
	
	run: function(id, i) {
		
	}
		
		
};

// guides best places
PD.places = {
	
	init: function() {
		$j('.pd-places-menu a.pd-button').hover(function() {
			$j('.pd-places-menu a.pd-button').each(function() {
				$j(this).removeClass('pd-current');
			});
			$j(this).addClass('pd-current');
			$j('.pd-places-best').each(function() {
				$j(this).hide();
			});
			$j($j(this).attr('href')).show();
		});
		$j('.pd-places-menu a.pd-button').click(function() { return false; });
	}
	
}

// counters
PD.counters = {
	
	init: function() {
		var boxes = $j('.pd-counter');
		boxes.each(function (i, box) {
			var id = $j(box).attr('id');
			PD.counters.run(id, 12687);
		});
	},
	
	run: function(id, i) {

		$j('#'+id+'-digit-1').html(Math.floor(i / 1)%10);
		$j('#'+id+'-digit-2').html(Math.floor(i / 10)%10);
		$j('#'+id+'-digit-3').html(Math.floor(i / 100)%10);
		$j('#'+id+'-digit-4').html(Math.floor(i / 1000)%10);
		$j('#'+id+'-digit-5').html(Math.floor(i / 10000)%10);
		$j('#'+id+'-digit-6').html(Math.floor(i / 100000)%10);
		
		window.setTimeout(function () { PD.counters.run(id, (i+1)); }, 5000);
	}
	
};

// cookies
PD.cookies = {
	prefix: 'partirdemain_',
	session: null,
	
	init: function() {
		PD.cookies.session = $j.cookie(PD.cookies.prefix + 'session');
	},
	
	getMemberStatus: function() {
		if(null == PD.cookies.session) {
			return 'new';
		} else if('guest' == PD.cookies.session) {
			return 'guest';
		} else {
			return 'member';
		}
	},
	
	setMemberStatus: function(status, email) {
		if('guest' == status) {
			$j.cookie(PD.cookies.prefix + 'session', 'guest');
		} else if('member' == status) {
			$j.cookie(PD.cookies.prefix + 'session', email, {expires: 365});
		}
	}
	
};

// modals
PD.modals = {
	
	init: function() {
		/*if('new' == PD.cookies.getMemberStatus()) {
			if($j('#pd-popup-subscribe')) {
				PD.modals.subscribe();
			}
		}*/
	},
	
	subscribe: function() {
		$j.blockUI({
			message: $j('#pd-popup-subscribe'),
			focusInput: false,
			css: {
				width: '686px',
				top:  ($j(window).height() - 294) /2 + 'px', 
                left: ($j(window).width() - 686) /2 + 'px', 
				border: 'none',
				cursor: 'default',
				backgroundColor: 'transparent'
			},
			overlayCSS: { 
				backgroundColor: '#fff',
				opacity: 0.80,
				cursor: 'default'
			}
		});
		$j('.blockOverlay').click($j.unblockUI);
		PD.cookies.setMemberStatus('guest');
		PD.tracker.pageview('/popup-subscribe');
	},
	
	subscribeConfirmation: function(email) {
		$j.blockUI({
			message: $j('#pd-popup-subscribe-confirmation'),
			focusInput: false,
			css: {
				width: '696px',
				top:  ($j(window).height() - 299) /2 + 'px', 
                left: ($j(window).width() - 696) /2 + 'px', 
				border: 'none',
				cursor: 'default',
				backgroundColor: 'transparent'
			},
			overlayCSS: { 
				backgroundColor: '#fff',
				opacity: 0.80,
				cursor: 'default'
			}
		});
		$j('.blockOverlay').click($j.unblockUI);
		PD.cookies.setMemberStatus('member', email);
		PD.tracker.pageview('/popup-subscribe-confirm');
	},
	
	download: function(type) {
		if(type == 'full') {
			$j('.pd-popup-download-simple').hide();
			$j('.pd-popup-download-full').show();
		} else {
			$j('.pd-popup-download-simple').show();
			$j('.pd-popup-download-full').hide();
		}
			
		$j.blockUI({
			message: $j('#pd-popup-download'),
			focusInput: false,
			css: {
				width: '695px',
				top:  ($j(window).height() - 380) /2 + 'px', 
                left: ($j(window).width() - 695) /2 + 'px', 
				border: 'none',
				cursor: 'default',
				backgroundColor: 'transparent'
			},
			overlayCSS: { 
				backgroundColor: '#fff',
				opacity: 0.80,
				cursor: 'default'
			}
		});
		$j('.blockOverlay').click($j.unblockUI);
		$j('#pd-box-download-type').val(type);
		
		PD.tracker.pageview('/popup-download');
	},
	
	downloadConfirmation: function(type, email) {
		
		if(type == 'full') {
			$j('.pd-popup-download-simple').hide();
			$j('.pd-popup-download-full').show();
		} else {
			$j('.pd-popup-download-simple').show();
			$j('.pd-popup-download-full').hide();
		}
		
		$j.blockUI({
			message: $j('#pd-popup-download'),
			focusInput: false,
			css: {
				width: '695px',
				top:  ($j(window).height() - 380) /2 + 'px', 
                left: ($j(window).width() - 695) /2 + 'px', 
				border: 'none',
				cursor: 'default',
				backgroundColor: 'transparent'
			},
			overlayCSS: { 
				backgroundColor: '#fff',
				opacity: 0.80,
				cursor: 'default'
			}
		});
		$j('.blockOverlay').click($j.unblockUI);
		PD.cookies.setMemberStatus('member', email);
		PD.tracker.pageview('/popup-download-confirm');
	},
	
};

// fisheye
PD.fisheye = {
	
	init: function() {
		$j('.pd-fisheye li').hover(function() {
			$j('.pd-fisheye li.pd-big').each(function() {
				$j(this).removeClass('pd-big').addClass('pd-small');
			});
			$j(this).removeClass('pd-small').addClass('pd-big');
		});
	}

};

// tooltips
PD.tooltips = {
	
	init: function() {
		$j('.pd-tooltips a[title]').qtip({
	      position: {
	         corner: {
	            target: 'topRight',
	            tooltip: 'bottomLeft'
	         }
	      },
	      style: {
	         name: 'light',
	         padding: '7px 13px',
	         width: {
	            max: 250,
	            min: 0
	         },
	         
	         border: {
			      width: 2,
			      radius: 6,
			      color: '#D9D9D9'
			 },
			 'font-size': 12,
			 color: '#6B6B6B',
			 'font-family':'Arial',
	         tip: true
	      }
	   });

	}

};
	
// slideshow
PD.slideshow = {
	
	init: function() {
		setInterval( "PD.slideshow.slide()", 3000 );
	},
	
	slide: function() {
		var slideshows = $j('.pd-post-slideshow div.pd-slideshow');
		slideshows.each(function(i, slideshow) {
			var slideshow_id = $j(slideshow).attr('id');
			var $active = $j('#'+slideshow_id+' img.active');
		    if ( $active.length == 0 ) $active = $j('#'+slideshow_id+' img:last');
		    var $next =  $active.next().length ? $active.next() : $j('#'+slideshow_id+' img:first');
		    $active.addClass('last-active');
		    $next.css({opacity: 0.0})
		        .addClass('active')
		        .animate({opacity: 1.0}, 1000, function() {
		            $active.removeClass('active last-active');
			});
		});
	}
	
};
	
// clock
PD.clock = {
	
	init: function() {
		setInterval( "PD.clock.tic()", 1000 );
	},
	
	tic: function() {
		var separators = $j('.pd-clock span.pd-separator');
		separators.each(function(i, separator) {
			if('hidden' == $j(separator).css('visibility')) {
				$j(separator).css('visibility', '');
			} else {
				$j(separator).css('visibility', 'hidden');
			}
		});
	}
	
};

// maps
PD.maps = {
	init: function() {
		if($j('.pd-maps').length != 0) {
			var script = document.createElement('script');
			script.type = "text/javascript";
			script.src = "http://maps.google.com/maps/api/js?sensor=false&language=fr&callback=prepare_pd_guide_map";
			document.body.appendChild(script);
		}
	}
};

// search_flights
PD.search_flights = {
	state: 'finished',
	last_id: 0,
	loading: 0,
	percent: 1,
	show_results: false,
	
	results_per_page: 20,
	current_page: 1,
	
	cache_results: [],
	cache_results_index_key: {},
	
	tmp_data: null,
	tmp_best_diff: 0,
	tmp_best_id: -1,
	
	init: function() {
		
		// init form
		$j('#from_search_flights').submit(function() {
			$j.ajax({
				'type': 'POST',
				'url': 'server/search.json?action=flight-create', 
				'data': $j(this).serialize(),
				'dataType' : 'json',
				'success': function(data) {
					window.location = data;
				}
			});
			return false;
		});
		
		// init searching
		if($j('#form_search_flights_id') && Number($j('#form_search_flights_id').val()) > 0) {
			PD.search_flights.state = 'running';
			PD.search_flights.update($j('#form_search_flights_id').val());
			$j('#form_search_flights_loading').show();
			PD.search_flights.tic();
		}
		
		if($j('#from_search_flights')) {

			// prepare dates
			$j.datepicker.setDefaults($j.datepicker.regional['fr']);
			
			// dates
			$j('#params_from_date').datepicker({dateFormat:'dd/mm/yy', minDate:'+1D', maxDate:'+365D', onSelect:function(dateText, inst) { 
				$j("#params_to_date" ).datepicker('option', 'minDate', new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay));
			}});
			$j('#params_to_date').datepicker({dateFormat:'dd/mm/yy', minDate:'+1D', maxDate:'+365D'});
			
			// from & to
			$j('.pd-destination input').focus(function() {
				if('Ville de départ' == $j(this).val() || 'Ville d\'arrivée' == $j(this).val()) {
					$j(this).val('');
				} else {
					$j(this).select();
				}
			});
			$j('.pd-destination input').blur(function() {
				if('' == $j(this).val() || '' == $j('#'+$j(this).attr('id')+'_airport').val()) {
					$j(this).val($j(this).attr('title'));
				}
			});
			
			$j('.pd-destination input').autocomplete({
				source: '/server/airports.php?action=get_airport',
				minLength: 2,
				delay: 300,
				search: function(event, ui) { 
					$j('#'+$j(this).attr('id')+'_airport').val('');
				},
				select: function(event, ui) {
					$j('#'+$j(this).attr('id')+'_airport').val(ui.item.code);
					$j('#'+$j(this).attr('id')+'_city').val(ui.item.city);
				}
			});
			
			$j('.pd-switch-roundtrip').change(function() {
				if($j('#params_flight_roundtrip').attr('checked')) {
					$j('.pd-roundtrip').css({visibility:'visible'});
					//$j('.pd-roundtrip').show();
					$j('#pd-roundtrip-date').css('backgroundImage', 'url(../images/flight-search-background.png)');
				} else {
					$j('.pd-roundtrip').css({visibility:'hidden'});
					//$j('.pd-roundtrip').hide();
					$j('#pd-roundtrip-date').css('backgroundImage', 'none');
				}
			});
			$j('.pd-switch-roundtrip').change();
			
		}
	},
	
	submit: function() {
		if($j('#params_from_name').val() != 'Ville de départ' && $j('#params_to_name').val() != 'Ville d\'arrivée' && $j('#params_from_name_airport').val() != '' && $j('#params_to_name_airport').val() != '') {
			$j('#from_search_flights').submit();
		} else {
			$j('#from_search_flights').effect('shake', {distance:10, times:2}, 100);
		}
		
		return false;
	},
	
	tic: function() {
		PD.search_flights.loading = PD.search_flights.loading + 4;
		$j('#form_search_flights_loading .pd-background').css('backgroundPosition', '-'+PD.search_flights.loading+'px top');
		if(0 == PD.search_flights.loading % 10) {
			if('done' == PD.search_flights.state) {
				PD.search_flights.percent = 100;
			}
			if(PD.search_flights.percent < 101) {
				$j('#form_search_flights_loading .pd-percent').html(PD.search_flights.percent+'%');
			} else {
				$j('#form_search_flights_loading .pd-percent').html('100%');
			}
			PD.search_flights.percent++;
		}
		if(PD.search_flights.percent < 200) {
			if(PD.search_flights.percent > 100) {
				PD.search_flights.percent = 200; 
				$j('#form_search_flights_loading').hide();
				
				// manage no results
				if(PD.search_flights.cache_results.length == 0) {
					$j('#form_search_flights_noresults').show();
					$j('#pd-box-flight-results').show();
					PD.search_flights.show_results = true;
				}
				
				// add pagination
				else if(PD.search_flights.cache_results.length > PD.search_flights.results_per_page) {
					$j('#pd-box-flight-pagination').show();
					$j('#pd-box-flight-pagination td.pd-left a').hide();
				}
				
			}
			if(PD.search_flights.percent < 50) {
				window.setTimeout(PD.search_flights.tic, 50);
			} else if(PD.search_flights.percent < 70) {
				window.setTimeout(PD.search_flights.tic, 75);
			} else if(PD.search_flights.percent < 80) {
				window.setTimeout(PD.search_flights.tic, 100);
			}
			
		} else {
			$j('#form_search_flights_loading .pd-percent').html('100%');
		}
	},
	
	page: function(page) {
		var new_page = PD.search_flights.current_page;
		
		if('next' == page) {
			new_page++;
		} else if('previous' == page) {
			new_page--;
		}
		
		if(new_page > 0 && new_page <= Math.ceil(PD.search_flights.cache_results.length / PD.search_flights.results_per_page)) {
			$j('#pd-flights-results').html('');
			
			var start = PD.search_flights.results_per_page * (new_page - 1);
			var end = (start + PD.search_flights.results_per_page) < PD.search_flights.cache_results.length ? (start + PD.search_flights.results_per_page) : PD.search_flights.cache_results.length - 1;
			for(var i=start ; i<end ; i++) {
				$j('#pd-flights-results').append(PD.search_flights.cache_results[i].content);
			}
			
			if(new_page > 1) {
				$j('#pd-box-flight-pagination td.pd-left a').show();
			} else if(new_page == 1) {
				$j('#pd-box-flight-pagination td.pd-left a').hide();
			}
			
			if(end+1 == PD.search_flights.cache_results.length) {
				$j('#pd-box-flight-pagination td.pd-right a').hide();
			} else {
				$j('#pd-box-flight-pagination td.pd-right a').show();
			}
			
			// update page
			$j('#pd-box-flight-pagination-current-page').html(new_page);
			$j('#pd-box-flight-pagination-total-pages').html(Math.ceil(PD.search_flights.cache_results.length / PD.search_flights.results_per_page));
			
			// clean last separator
			var lastid = PD.search_flights.cache_results[i-1].id;
			$j('#pd-search-flight-result-'+lastid+'-separator').hide();
			
			PD.search_flights.current_page = new_page;
		}
		
		return true;
	},
	
	more: function() {
		$j('.pd-form-advanced').toggle();
		if($j('#pd-more-options span').html() == "Plus d'options") {
			$j('#pd-more-options').html('<img src="/images/minus.png" alt="-" />&nbsp;<span>Moins d\'options</span>');
		} else {
			$j('#pd-more-options').html('<img src="/images/plus.png" alt="+" />&nbsp;<span>Plus d\'options</span>');
		}
		return false;
	},
	
	update: function(id) {
		if('running' === PD.search_flights.state) {
			$j.ajax({
				'type': 'GET',
				'url': 'server/search.json?action=flight-update&search='+id+'&last='+PD.search_flights.last_id, 
				'dataType' : 'json',
				'success': function(data) {
					PD.search_flights.state = data.search.state;
					
					// update best price
					if($j('#pd-last-search-'+data.search.id) && data.search.price_human.length > 0) {
						$j('#pd-last-search-'+data.search.id).html(data.search.price_human);
					}
					
					if(data.results) {

						for(var i=0 ; i<data.results.length ; i++) {
							
							var add = true;
							
							// detect same offer
							if(PD.search_flights.cache_results_index_key[data.results[i].key]) {

								// check if the new price is better
								if(Number(data.results[i].price) < PD.search_flights.cache_results_index_key[data.results[i].key]) {
								
									// search for it
									var notfound = true;
									var j = 0;
									while(notfound) {
										if(PD.search_flights.cache_results[j].key == data.results[i].key) {

											// remove element
											PD.search_flights.cache_results.splice(j, 1);
											notfound = false;
										}
										j++;
									}
								} 
								
								// discard element
								else {
									add = false;
								}
								
							}
							
							if(add) {
								// add in cache
								PD.search_flights.cache_results_index_key[data.results[i].key] = Number(data.results[i].price);
							
								// add results to the array
								PD.search_flights.cache_results.push(data.results[i]);
							}
							
							// store last id
							PD.search_flights.last_id = data.results[i].id;
						}
						
						// sort array
						PD.search_flights.cache_results.sort(PD.search_flights.compare);
						
						// update order
						$j('#pd-flights-results').html('');
						var max = PD.search_flights.cache_results.length < PD.search_flights.results_per_page ? PD.search_flights.cache_results.length : PD.search_flights.results_per_page;
						for(var i=0 ; i<max ; i++) {
							$j('#pd-flights-results').append(PD.search_flights.cache_results[i].content);
						}
						
						// clean last separator
						if(PD.search_flights.cache_results[max - 1]) {
							var lastid = PD.search_flights.cache_results[max - 1].id;
							$j('#pd-search-flight-result-'+lastid+'-separator').hide();
						}
						
						// update page
						$j('#pd-box-flight-pagination-current-page').html(1);
						$j('#pd-box-flight-pagination-total-pages').html(Math.ceil(PD.search_flights.cache_results.length / PD.search_flights.results_per_page));
							
						// display results box
						if(PD.search_flights.cache_results.length > 0 && false == PD.search_flights.show_results) {
							$j('#pd-box-flight-results').show();
							PD.search_flights.show_results = true;
						}
					}
					
				}
			});
			window.setTimeout('PD.search_flights.update('+id+')', 2000);
		}
	},
	
	go: function(code) {
		PD.tracker.pageview('/search-flights-go');
		var notfound = true;
		var url = '';
		var j = 0;
		while(notfound) {
			if(PD.search_flights.cache_results[j].key == code) {
				url = PD.search_flights.cache_results[j].url;
				notfound = false;
			}
			j++;
		}
		window.open(url);
	},
	
	compare: function (a,b) {
		if (Number(a.price) < Number(b.price))
			return -1;
		if (Number(a.price) > Number(b.price))
			return 1;
		return 0;
	}
	
};

// search_flights
PD.search_cruises = {
	init: function() {
		if($j('#from_search_cruises')) {
			$j('#params_from_date').datepicker({dateFormat:'dd/mm/yy', minDate:'+1D', maxDate:'+450D'});
			
			// init form
			$j('#from_search_cruises').submit(function() {
				$j.ajax({
					'type': 'POST',
					'url': 'server/search.json?action=cruise-create', 
					'data': $j(this).serialize(),
					'dataType' : 'json',
					'success': function(data) {
						window.location = data;
					}
				});
				return false;
			});
		}
	}
};

// ads
PD.ads = {
	init: function() {
		$j('.pd-ads-encoded').each(function() {
			var str = $j(this).html();
		//	console.log($j.base64Decode(str.substring(5, str.length-4)));
		//	$j(this).html(' '+$j.base64Decode(str.substring(5, str.length-4))+' ');
		});
	}
};

// forum
PD.forum = {
	init: function() {
		/*$j('.pd-box-forum .pd-row').hover(function() {
			var classList = $j(this).attr('class').split(/\s+/);
			var total = classList.length;
			for (var i = 0; i < total; i++) {
				var curclass = classList[i];
				if(curclass != 'pd-row') {
					$j('.pd-row').removeClass('pd-row-current');
					$j('.'+curclass).addClass('pd-row-current');
				}
			}
		});	*/
	}
};

// booklet
PD.book = {
	init: function() {
		if($j('#pd-booklet')) {
			$j('#pd-booklet').booklet({
				width:  631,
				height: 425,
				arrows: false,
				hovers: true,
				pageNumbers: false
			});
			$j('#pd-booklet').show();
		}
	}
};

// init
$j(document).ready(function() {
	PD.cookies.init();
	PD.bestdeals.init();
	//PD.counters.init();
	PD.modals.init();
	PD.slideshow.init();
	PD.clock.init();
	PD.gallery.init();
	PD.maps.init();
	PD.places.init();
	PD.fisheye.init();
	PD.tooltips.init();
	PD.search_flights.init();
	PD.search_cruises.init();
	PD.forum.init();
	PD.book.init();
	
	
	//PD.ads.init();
});

