var App = {
	bgLeft : null,
	bgRight : null,
	domready : function() {
		App.setEngine();
		MooTools.lang.setLanguage('pt-BR');
		new Search();
		new Outdoor();
		new Offers();
		new FAQ();
		new DirectorsCut();
		new TextLang();
		$$('a._blank').set('target', '_blank');
		Backgrounds.initialize();
		PlaceHolder.initialize();
		Tracking.initialize();
	},
	load : function() {
		//Backgrounds.setImages();
		//new TopOffers();
		
		$('header-ad').addEvent('click', function(){ openLink('', 'Banner_Square||cabecalho' );});	
		$('footer-ad-left').addEvent('click', function() { openLink('', 'Banner_Rodape_1||rodape_esq' ); });
		$('footer-ad-right').addEvent('click', function(){ openLink('', 'Banner_Rodape_2||rodape_dir' );});	

	},
	setEngine : function() {
		var e = Browser.Engine.name;
		$(document.body).addClass(e);
		if (e == 'trident') $(document.body).addClass(App.getIEVersion());
	},
	getIEVersion : function() {
		var odoc = document;
		if (odoc.body.style.opacity != undefined) { return 'ie9'; }
		if (odoc.body.style.msBlockProgression != undefined) { return 'ie8'; }
		if (odoc.body.style.msInterpolationMode != undefined) { return 'ie7'; }
		if (odoc.body.style.textOverflow != undefined) { return 'ie6'; }
	}
}

var PlaceHolder = {
	initialize : function() {
		var blurClass = 'blur';
		$$('input[placeholder]').each(function(input) {
			var title = input.get('placeholder');
			var remove = function() {
				if (input.get('value') === title && input.hasClass(blurClass)) {
					input.set('value','')
					input.removeClass(blurClass);
				}
			};
			input.addEvent('blur', function() {
				if (input.get('value') === '') {
					input.set('value', title);
					input.addClass(blurClass);
				}
			});
			input.addEvent('focus', remove);
			$(input.form).addEvent('submit', remove);
			input.fireEvent('blur');
			input.set('placeholder','');
		});
	}
}

var Backgrounds = {
	Day : { left : [], right : [], color : '#fff' },
	Night : { left : [], right : [], color : '#01192a' },
	initialize : function() {
		var e = Browser.Engine.name;
		if (e != 'webkit' && e != 'gecko') {
			Backgrounds.updateHeight();
			Backgrounds.updateHeight.periodical(100);
		}
	},
	updateHeight : function() {
		var e = Browser.Engine.name;
		if (e != 'webkit' && e != 'gecko') {
			$$('div.texture span').each(function(el) {
				el.setStyle('height', $('container-header').getSize().y + $('content').getSize().y);
			});
		}
	},
	setImages : function() {
		var hour = new Date().get('Hours');
		var backgrounds = (hour > 17 || hour < 6) ? Backgrounds.Night : Backgrounds.Day;
		if (backgrounds.left.length == 0) return;
		var rand = $random(0,backgrounds.left.length-1);
		var left = backgrounds.left[rand];
		var right = backgrounds.right[rand];
		$('main').addClass((backgrounds == Backgrounds.Night) ? 'night' : 'day');
		$('bg-left').setStyle('background', backgrounds.color + ' url(' + left + ') no-repeat right bottom');
		$('bg-right').setStyle('background', backgrounds.color + ' url(' + right  + ') no-repeat left bottom');
	}
}


var Tracking = {

	initialize : function() {

		var str_page = String($$('a.selected').get('title')); 
		var str_page_track = accentsTidy(str_page.replace(',','/'));

		str_page_track = (str_page_track.length) ? '/' + str_page_track : '/Homepage'
		_gaq.push(['_trackPageview', str_page_track]);
	
		$('search-form').addEvent('submit', function(){	this.trackSearch(); }.bind(this)); 
		$('form-news').addEvent('submit', function(){	this.trackNews();   }.bind(this)); 
		$('search-multicity').addEvent('click', function() { _gaq.push(['_trackPageview', '/Homepage/Buscador/Pesquisa_Multicidades']); });

		//$('ls_RSS').addEvent('click', function() { 		_gaq.push(['_trackPageview', '/Homepage/Rodape/Redes_Sociais/Clicou-RSS']); });
		$('ls_Twitter').addEvent('click', function() { 	_gaq.push(['_trackPageview', '/Homepage/Rodape/Redes_Sociais/Clicou-Twitter']); });
		$('ls_Facebook').addEvent('click', function() { _gaq.push(['_trackPageview', '/Homepage/Rodape/Redes_Sociais/Clicou-Facebook']); });
		//$('ls_Orkut').addEvent('click', function() { 	_gaq.push(['_trackPageview', '/Homepage/Rodape/Redes_Sociais/Clicou-Orkut']); });
		//$('ls_YouTube').addEvent('click', function() { 	_gaq.push(['_trackPageview', '/Homepage/Rodape/Redes_Sociais/Clicou-YouTube']); });

	},

	trackSearch : function(){

		var eF = $('search-from');
		var eT = $('search-to');
	
		if(eF.value.length && eT.value.length && $('returning-on').value.length && $('returning-off').value.length)	
		{
			var track_cmd = '/Homepage/Buscador/Pesquisou_Voo/'+accentsTidy(eF.options[eF.selectedIndex].text)+'-'+accentsTidy(eT.options[eT.selectedIndex].text);
			_gaq.push(['_trackPageview', track_cmd]);
		}
	},
	
	trackNews : function(){

		if( $('nf-state').value.length && $('nf-city').value.length && $('nf-email').value.length )
			_gaq.push(['_trackPageview', 'Homepage/Optin/Cadastrou_Newsletter']);
	
	},

	trackBoxOffers: function(from, to){

		var track_cmd = '/Homepage/Box_Ofertas/' + accentsTidy(from) + '-' + accentsTidy(to);
		_gaq.push(['_trackPageview', track_cmd]);

	},
	
	trackTopOffers: function(from, to){

		from = accentsTidy(from.replace(' para',''));
		to = accentsTidy(to);

		var track_cmd = 'Homepage/Rodape_Ofertas/Clicou/Oferta/' + from + '-' + to;
		_gaq.push(['_trackPageview', track_cmd]);

	},
	
	trackTopOffersClose: function(){ _gaq.push(['_trackPageview', '/Homepage/Rodape_Ofertas/Fechou']); },
	
	trackFAQSearch: function(q){

		var track_cmd = '/Informacoes/Perguntas_Frequentes/Busca/' + accentsTidy(q);
		_gaq.push(['_trackPageview', track_cmd]);

	},
	
	trackFAQQuestion: function(q){

		var track_cmd = '/Informacoes/Perguntas_Frequentes/Pergunta/' + accentsTidy(q);
		_gaq.push(['_trackPageview', track_cmd]);

	},

	trackBanner: function(source){

		var params = source.split("||");

		/*	Banner_TV / Banner_Square / Banner_Chamada_X / Banner_Rodape_X = "Banner_TV||promo-novembro" */
		_gaq.push(['_trackEvent', params[0], 'Clicou', params[1]]);
	}


}


var Search = new Class({
	initialize : function() {
		this.s = $('search');
		if (!this.s) return;
		this.init();
	},
	init : function() {
		this.buyNow = new BuyNow();
		this.setDatePicker();
		this.setReturningEvents();
		this.initSelects();
		this.initValidations();
		this.s.setStyle('display','block');
	},
	setDatePicker : function() {
		var date = new Date();
		var sr = new DatePicker($('search-return'), {
			pickerClass : 'datepicker_vista',
			minDate : date.clone()
		});
		var so = new DatePicker($('search-out'), {
			pickerClass : 'datepicker_vista',
			minDate : date.clone(),
			onSelect : function(d) {
				sr.options.minDate = d;
			}
		});
	},
	setReturningEvents : function() {
		var date = $('search-dates-returninng');
		$('returning-on').addEvent('click', function() { date.setStyle('display','block'); });
		$('returning-off').addEvent('click', function() { date.setStyle('display','none'); });
	},
	initSelects : function() {
		this.sF = $('search-from');
		this.sT = $('search-to');
		new Request({
			url : this.sF.get('data-url'),
			method : 'get',
			onComplete : function(response) {
				this.airports = JSON.decode(response);
				this.sF.options.length = 0;
				this.sF.options[0] = new Option('Selecione', '');
				this.airports.each(function(airport) {
					this.sF.options[this.sF.options.length] = new Option(airport.name, airport.id);
				}.bind(this));
				this.populateSelect();
				this.selectWebOffer();
			}.bind(this)
		}).send();
		this.sF.addEvent('change', function() {
			this.populateSelect();
		}.bind(this));
	},
	populateSelect : function() {
		var selected = this.getAirport(this.sF.get('value'));
		if (!selected) return;
		var destinations = selected.destinations;
		this.sT.options.length = 0;
		this.sT.options[0] = new Option('Selecione', '');
		destinations.each(function(id) {
			var destination = this.getAirport(id);
			this.sT.options[this.sT.options.length] = new Option(destination.name, id);
		}.bind(this));
	},
	getAirport : function(id) {
		var a = null;
		this.airports.each(function(airport) {
			if (airport.id == id) a = airport;
		}.bind(this));
		return a;
	},
	selectWebOffer : function() {
		var uri = window.location.toString().split('#');
		var hash = uri[1];
		if (hash && hash.test('WebOferta')) {
			var params = this.getParamsFromHash(hash);
			this.sF.getElements('option').each(function(option, i) {
				if (option.get('value') == params['Origem']) {
					this.sF.selectedIndex = i;
				}
				this.populateSelect();
				this.sT.getElements('option').each(function(option_sT, i_sT) {
					if (option_sT.get('value') == params['Destino']) {
						this.sT.selectedIndex = i_sT;
					}
				}.bind(this));
			}.bind(this));
			this.buyNow.toggle();
		}
	},
	getParamsFromHash : function(hash) {
		var params = {};
		hash.split('?')[1].split('&').each(function(kv) {
			var p = kv.split('=');
			params[p[0]] = p[1];
		});
		return params;
	},
	initValidations : function() {
		new mickaForms({
			'form' : 'search-form',
			'validations' : {
				'required' : [
					['departure'],
					['arrival'],
					['beginDate'],
					['finalDate']
				]
			}
		});
	}
});

var Outdoor = new Class({
	initialize : function() {
		this.outdoor = $('flash-outdoor');
		if (!this.outdoor) return;
		this.init();
	},
	init : function() {
		window.addEvent('domready', function() {
			this.obj = new Swiff(this.outdoor.get('data-url'), {
				container : 'flash-outdoor',
				width: 640,
				height: 260,
				params: {
					allowFullScreen: 'true',
					allowscriptaccess: 'always'
				}
			});
		}.bind(this));
	}
});

var Offers = new Class({
	opened : false,
	initialize : function() {
		this.offers = $('offers');
		if (!this.offers) return;
		this.init();
	},
	init : function() {
		this.s = $('offers-from');
		this.list = this.s.getElements('li'); this.list.shift(); this.list.pop();
		this.offersHeader = $$('#offers thead tr');
		this.offers = $$('#offers tbody tr');
		
		this.list[0].addClass('selected');
		this.selected_li = this.list[0];
		this.showOffers(this.list[0].get('data-code'));
		
		this.list.each(function(li) {
			li.addEvent('click', function() {
				if (this.opened) {
					this.list.removeClass('selected');
					li.addClass('selected')
					this.showOffers(li.get('data-code'), true);
					this.selected_li = li;
				}
				this.opened = (this.opened) ? false : true;
				this.s.toggleClass('opened');
			}.bind(this));
		}.bind(this));
		this.offers.each(function(tr) {
			tr.addEvent('click', function() {

				Tracking.trackBoxOffers(tr.get('data-from-name'), tr.get('data-to-name'));

				location.href = this.getLink(tr.get('data-from-code'), tr.get('data-code'), tr.get('data-url'));
			
			}.bind(this));
		}.bind(this));
		this.s.addEvent('clickout', function() {
			if (this.opened) this.close();
		}.bind(this));
	},
	open : function() {
		this.opened = true;
		this.s.addClass('opened');
	},
	close : function() {
		this.opened = false;
		this.s.removeClass('opened');
	},
	showOffers : function(code, highlight) {
		if (highlight) this.offersHeader.getElements('th').each(function(th) { th.highlight(); });
		this.offers.removeClass('selected');
		this.offers.each(function(tr) {
			if (tr.get('data-from-code') == code) tr.addClass('selected');
		});
		Backgrounds.updateHeight();
	},
	getLink : function(from, to, url) {
		return url + '#WebOferta?Origem=' + from + '&Destino=' + to;
	}
});

var TopOffers = new Class({
	Extends : Offers,
	initialize : function() {
		this.offers = $('top-offers');
		if (!this.offers) return;
		this.init();
	},
	init : function() {
		this.addCloseEvent();
		this.addScrollEvents();
		this.addRows();
		this.show();
	},
	addCloseEvent : function() {
		$('top-offers-close').addEvent('click', function() {
			Tracking.trackTopOffersClose();	
			this.hide();
		}.bind(this));
	},
	addScrollEvents : function() {
		if (App.getIEVersion() == 'ie6') {
			this.fixPosition.periodical(100);
			window.addEvent('scroll', function() {
				this.fixPosition();
			}.bind(this));
		}
	},
	fixPosition : function() {
		var scrolled = $(document.body).getScroll().y;
		var documentHeight = $(document.body).getSize().y;
		var topOffersHeight = $('top-offers').getSize().y;
		$('top-offers').setStyle('top', documentHeight + scrolled - topOffersHeight);
	},
	getCheapers : function() {
		var cheapers = [100000,100000];
		var trs = [];
		$$('#offers td.price').each(function(td) {
			var value = td.get('text').replace(/[^\d,]+/, '').replace(/,+/, '.').toFloat();
			if (value < cheapers[0]) {
				cheapers[0] = value;
				trs[0] = td.getParent();
			} else if (value < cheapers[1]) {
				cheapers[1] = value;
				trs[1] = td.getParent();
			}
		});
		return trs;
	},
	addRows : function() {
		var trs = this.getCheapers();
		var body = $('top-offers-table').getElement('tbody').empty();
		trs.each(function(tr) {
			var code = tr.get('data-from-code');
			
			var from = '';
			$$('#offers-from li').each(function(li) {
				if (li.get('data-code') == code) from = li.get('text').slice(3).slice(0,-1);
			});
			
			var tds = tr.getElements('td');
			var to = tds[0].get('text');
			var price = tds[1].get('text');
			
			var newTr = new Element('tr', {
				events : {
					click : function() {
						location.href = this.getLink(tr.get('data-from-code'), tr.get('data-code'), tr.get('data-url'));
						Tracking.trackTopOffers(from, to);
					}.bind(this)
				}
			}).inject(body);
			var newTd = new Element('td', {
				html : '<span>' + from + ' ' + to + '</span>'
			}).inject(newTr);
			var newTd = new Element('td', {
				'class' : 'price',
				html : '<span>' + price + '</span>'
			}).inject(newTr);
		}.bind(this));
	},
	show : function() {
		$(document.body).adopt(this.offers);
		this.offers.setStyle('display','block');
		$('footer').setStyle('padding-bottom', 90);
	},
	hide : function() {
		this.offers.setStyle('display','none');
		$('footer').setStyle('padding-bottom', 10);
	}
});

var BuyNow = new Class({
	initialize : function() {
		this.btn = $('btn-buynow');
		if (!this.btn) return;
		this.init();
	},
	init : function() {
		this.e = Browser.Engine.name;
		this.container = $('search-container');
		this.btn.addEvent('click', function() {
			this.toggle();
		}.bind(this));
		if (this.e != 'webkit' && this.e != 'gecko') {
			this.container.toggleClass('closed');
		} else {
			this.slide = new Fx.Slide(this.container, { duration : 400 }).hide();
		}
	},
	toggle : function() {
		if (this.e != 'webkit' && this.e != 'gecko') {
			this.container.toggleClass('closed');
			this.btn.toggleClass('opened');
			Backgrounds.updateHeight();
		} else {
			this.slide.toggle().chain(function() {
				this.btn.toggleClass('opened');
				Backgrounds.updateHeight();
			}.bind(this));
		}
	}
});

var FAQ = new Class({
	faq : null,
	list : [],
	categories : [],
	initialize : function() {
		this.faq = $('faq');
		if (!this.faq) return;
		this.init();
	},
	init : function() {
		$('faq-button').addEvent('click', function() { this.search(); }.bind(this));
		$('faq-text').addEvent('keyup', function(event) { if (event.key == 'enter') this.search(); }.bind(this));
		this.list = this.faq.getElements('li');
		this.list.each(function(li, i) {
			if (i < 30) li.addClass('closed');
			if (!this.categories.contains(li.get('data-category'))) this.categories.push(li.get('data-category'));
			li.getElement('a.question').addEvent('click', function() {
				li.toggleClass('closed');
				li.toggleClass('opened');
				Backgrounds.updateHeight();
				
				Tracking.trackFAQQuestion(this.textContent);

			});
		}.bind(this));
		this.createCategories();
	},
	createCategories : function() {
		var ul = $('faq-categories-links');
		this.categories.each(function(category) {
			var li = new Element('li').inject(ul);
			var a = new Element('a', {
				text : '- ' + category,
				events : {
					click : function() {
						this.search(category);
					}.bind(this)
				}
			}).inject(li);
		}.bind(this));
		Backgrounds.updateHeight();
	},
	search : function(str) {
		var param = (str) ? str : $('faq-text').get('value');
		if (!param) return;

		Tracking.trackFAQSearch(param);

		var title = $('faq-title');
		title.set('text', 'Perguntas encontradas:');
		title.highlight();
		var rows = false;
		this.list.each(function(li) {
			li.erase('class');
			var search_texts = [li.get('data-category'), li.getElement('a.question').get('text'), li.getElement('div.answer').get('text')];
			search_texts.each(function(text) {
				if (text.test(param,'i')) {
					li.addClass('closed');
					rows = true;
				}
			});
		});
		if (!rows) title.set('text', 'Nenhuma pergunta encontrada');
		Backgrounds.updateHeight();
	}
});

var DirectorsCut = new Class({
	initialize : function() {
		var hash = window.location.hash;
		if (hash == '#directors-cut' || Cookie.read('directors-cut')) {
			$(document.body).addClass('directors-cut');
			Cookie.write('directors-cut', 1)
		}
	}
});

var TextLang = new Class({
	options : {},
	initialize : function() {
		this.faq = $('search-help-flag');
		if (!this.faq) return;
		this.init();
	},
	init : function() {
		var cookie = Cookie.read('default-lang');
		if (cookie) {
			this.options.lang = cookie;
		} else {
			this.options.lang = 'pt-br';
			Cookie.write('default-lang', 'pt-br')
		}
		$('flag-en').addEvent('click', function() { this.change('en-us'); }.bind(this));
		$('flag-pt').addEvent('click', function() { this.change('pt-br'); }.bind(this));
		var form = $('search-form');
		form.store('action', form.get('action'));
		this.update();
	},
	change : function(lang) {
		this.options.last_lang = this.options.lang;
		this.options.lang = lang;
		Cookie.write('default-lang', lang);

		var idLinguaTraducao = (lang == 'pt-br') ? 1 : 2;
		Cookie.write('IdLinguaTraducao', idLinguaTraducao, {domain: 'www.webjet.com.br', path: '/'});

		this.update();
	},
	update : function() {
		$$('.text-lang').each(function(el) {
			var text = el.get('data-text-' + this.options.lang);
			if (text) {
				el.set('html', text);
			} else {
				if (this.options.last_lang) $(el.get('data-content-' + this.options.last_lang)).setStyle('display', 'none');
				$(el.get('data-content-' + this.options.lang)).setStyle('display', '');
			}
		}.bind(this));
		$('search-form').set('action', $('search-form').retrieve('action') + '?culture=' + this.options.lang);
	}
});


window.addEvent('domready', App.domready);
window.addEvent('load', App.load);


openLink = function(link, source)
{
	Tracking.trackBanner(source);

	if(link.length)
		document.location.href = link;
}

accentsTidy = function(r){
//	var r=s.toLowerCase();
	r = r.replace(new RegExp("\\s", 'g'),"_");
	r = r.replace(new RegExp("[Ã Ã¡Ã¢Ã£Ã¤Ã¥]", 'g'),"a");
	r = r.replace(new RegExp("Ã¦", 'g'),"ae");
	r = r.replace(new RegExp("Ã§", 'g'),"c");
	r = r.replace(new RegExp("[Ã¨Ã©ÃªÃ«]", 'g'),"e");
	r = r.replace(new RegExp("[Ã¬Ã­Ã®Ã¯]", 'g'),"i");
	r = r.replace(new RegExp("Ã±", 'g'),"n");                            
	r = r.replace(new RegExp("[Ã²Ã³Ã´ÃµÃ¶]", 'g'),"o");
	r = r.replace(new RegExp("Å“", 'g'),"oe");
	r = r.replace(new RegExp("[Ã¹ÃºÃ»Ã¼]", 'g'),"u");
	r = r.replace(new RegExp("[Ã½Ã¿]", 'g'),"y");
	return r;
};

