
jQuery.fn.extend({
	mask: function() {
		$('#mask').remove();
		this.append($('<div></div>').attr('id','mask'));
		var docHeight = ($.browser.opera)
			? document.documentElement.scrollHeight
			: $(this).height(); //document.documentElement.clientHeight;
		$('#mask')
			.width($(this).width())
			.height(docHeight)
			.css({
				'opacity':'0.8',
				'background':'#000',
				'position':'absolute',
				'top':0,
				'left':0,
				'zIndex':8000,
				'display':'none'
			})
			.click(function(){
				$.fn.sb_remove();
			})
			.bgIframe()
			.fadeIn(500);
	}, //EOF FN mask
	softbox: function(parameters) {
		var defaults = { width: 300, height: 300, offset: {left:0,top:0}, url: false, mask: false, iframe: false, html: false };
		var p = $.extend(defaults, parameters);
		$('.softbox').remove();
		if(p.mask){
			$('body').mask();
		}
		this
			.width(p.width-(2*7)-20)
			.height(p.height)
			.wrap(
				$('<div></div>')
					.addClass('softbox')
					.width(p.width)
					.css({
						'position':'absolute',
						'top':p.offset.top-2,
						'left':p.offset.left-2,
						'zIndex':10000
					})
				)
			.wrap(
				$('<div></div>')
					.addClass('rm')
				)
			.before(
				$('<div></div>')
					.addClass('cl')
					.height(this.css('height'))
				)
			.after(
				$('<div></div>')
					.addClass('cr')
					.height(this.css('height'))
				)
			.parent().before(
				$('<div></div>')
					.addClass('rt')
					.append($('<div></div>').addClass('cl').width(p.width-15).append($('<div></div>').addClass('x')))
					.append($('<div></div>').addClass('cr'))
					.click(function(){$.fn.sb_remove();})
				)
			.after(
				$('<div></div>')
					.addClass('rb')
					.append($('<div></div>').addClass('cl').width(p.width-15))
					.append($('<div></div>').addClass('cr'))
				)
			//.load(p.url)
			.bgIframe();
		if(p.iframe){
			this.append(
				$('<iframe frameborder="0" marginwidth="0" marginheight="0" allowTransparency="true">')
					.attr({
						'src':p.url,
						'width':(p.width-(2*7)-20),
						'height':p.height
					})
			);
		} else if(p.url) {
			this.load(p.url);
		} else {
			this.html(p.html);
		}
	}, //EOF FN softbox
	sb_remove: function() {
		return $('#mask,.softbox,#fake').remove();
	}, //EOF FN softbox
	slide: function(parameters) {
		var defaults = { slide: "none", timeout: 1500, interval: 3000, firstClass: 'first-element', mouseover:false, mouseout:false };
		var p = $.extend(defaults, parameters);
		this.each(function(){
			var o = $(this);
			if(p.mouseover) {
				o.children().mouseover(p.mouseover);
			}
			if(p.mouseout) {
				o.children().mouseout(p.mouseout);
			}
			var first = o.children(':first-child');
			switch(p.slide)
			{
				case 'none':
					o.append(first.remove().clone(true).removeClass(p.firstClass));
					break;
				default:
					switch(p.slide)
					{
						case 'left':
							var anim = {'marginLeft':-(first.width())};
							break;
						case 'top':
							var anim = {'marginTop':-(first.height())};
							break;
					}
					o.append(first.animate(anim,p.timeout,false,function(){first.remove();}).clone(true).removeClass(p.firstClass));
					break;
			}
			o.children(':first-child').addClass(p.firstClass);
			setTimeout((function(){o.slide(p);}),p.interval);
		});
	}, //EOF FN slide
	elements: function(all){ //Require indexOf method. Availible in FF1.5. There is a prototype function for IE.
		var elements = Array(this.length);
		var unique = Array();
		for(i=0;i<this.length;i++){
			el = this[i].nodeName + ( (this[i].className) ? (this[i].id) ? '#' + this[i].id : '.' + this[i].className : false );
			if(elements.indexOf(el)==-1) { unique.push(el); } elements.push(el);
		}
		return (all)?elements:unique;
	}
});

var closeCitySelector = function() {
	//alert("closeCitySelector");
	$('#esky_cities').empty().remove();
	$('#mask,.softbox,#fake').remove();
	//$(document).blur();
};
var selectAirportBack = function(code,field,fieldCode) {
	//alert("test");
	//$('#'+field).next('.hidden').val(code);
	$('#'+field).unbind('focus').val(code).removeClass('virgin');
	$('#'+field).focus();
	closeCitySelector();
};

// ---------- DOCUMENT READY ---------- /
$(document).ready(function(){
	//$("#esky #qlinks ul.second-line").css('width', '750px');

	/* prevent from loading page in IFRAME */
	var isInIFrame = (window.location != window.top.location) ? true : false;
	if (isInIFrame) {
		window.top.location = window.location;
	}
	
	if( $("#visual_promotions").length > 0){
		$('#visual_promotions').cycle({  
			timeout: 3000,
			fx: 'fade',
			speedIn: 400,
			speedOut:0,
			pager: '#visual_promotions_buttonContainer'
		}); 
	}
	if( $("#visual_promotions_right").length > 0){
		$('#visual_promotions_right').cycle({  
			timeout: 3000,
			fx: 'fade',
			speedIn: 400,
			speedOut:0,
			pager: '#visual_promotions_buttonContainer_right'
		}); 
	}
	
	
	//http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=ul.+Han+Asparuh+2,+Sofia&sll=42.689912,23.314962&sspn=0.010552,0.01929&ie=UTF8&hq=&hnear=2+%D1%83%D0%BB.+%D0%A5%D0%B0%D0%BD+%D0%90%D1%81%D0%BF%D0%B0%D1%80%D1%83%D1%85,+Sofia,+Bulgaria&ll=42.690637,23.31434&spn=0.010189,0.01929&z=16
	var locations = new Array();
	locations = [
	    "ul. Han Asparuh 2, Sofia"
	];
	
	$("#map").googlemap({
	    labels: true, 
		controls: true, 
		zoom: 16, 
		latitude: 42.690637, 
		longitude: 23.314962, 
		addresses: locations,
	    debug: false
	});
	
	if( $(".subscribe-news").length > 0 ){
		$("#newsletter-subscribe").hover(
			function(){$(this).css('cursor','pointer');},
			function(){$(this).css('cursor','');}
		);
		$("#newsletter-unsubscribe").hover(
			function(){$(this).css('cursor','pointer');},
			function(){$(this).css('cursor','');}
		);
	}
	
	Cufon.replace('#esky > h2:first, .partnership .site-sidebar h3', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('.right-column h2', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('#esky .right-column .flightsinfo-title', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('#esky .right-column .flightsinfo-content .currentDateTime', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('.airlines-column h2', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('#esky .panel > h2', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('.help_article #esky .left-column > h2', { fontFamily: 'MyriadPro-LightSemiExt' });
	
	Cufon.replace('#esky div.text > h3,#esky div.text > h2', { fontFamily: 'MyriadPro-LightSemiExt' });
	
	Cufon.replace('.qsf-content h3', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('.best-offers-list h4', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('.best-offers-list-first h4', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('.small-block h2', { fontFamily: 'MyriadPro-LightSemiExt' });
	Cufon.replace('h3.font_change', { fontFamily: 'MyriadPro-LightIt' });
    
	Cufon.replace('.partnership .site-sidebar li em', { fontFamily: 'MyriadPro-Bold' });
	
	
	$("ul#menu-main li").hover(
		function(){$(this).addClass('hovermenu'); },
		function(){$(this).removeClass('hovermenu'); }
	);
	
	$("#oli_promotions").tabs({
		selected: 0,
		fx: { opacity: 'toggle' }
	});
	
	
	// AIRPORTS 
	$('select#airportFilter').change(function(){
		var t = $(this);
		if (!t.val())
			t.val("BG");
		$.post(ibeConfig.airportguideTarget, {countrycode:t.val()}, function(airports){
			var airportList = '';
			var airportListOpt = '<option value="">-- Изберете летище --</option>';
			for (var a in airports) {
				if( $('select#airportList option:selected').attr('value') == airports[a].title ){
					var selectedopt = 'selected';
				}	
				else{
					var selectedopt = '';
				}
				airportList += '<li><a href="' + airports[a].url +'">' + airports[a].title + ' (' + airports[a].airportcode + ')' + '</a></li>';
				airportListOpt += '<option value="' + airports[a].url + '" '+selectedopt+'>' + airports[a].title + '</option>';
			}
			
			$('ul#airportList').empty().append(airportList).show();
			$('select#airportList').empty().append(airportListOpt).show();
		}, 'json');
		return false;
	});
	$('select#airportList').change(function(){
		var url = $(this).val();
		if (url != "") {
			document.location = url;
		}
	});
	$('select#airportFilter').trigger("change");
	$('ul#airlines img').imghover({suffix: '-on'});
	
	//$("select#airportList option[value='BG']").trigger('click');
	
	// NEWSLETTER SUBSCRIPTION 
	function newsletterSubscription() {
		var email = $('#newsletterEmail').attr('value');
		
		if (email === undefined || email == TXT_InputEmail) {
			$('#newsletter-response').attr('class', 'error').text('Моля попълнете полето за email').fadeIn('normal');
		}
		else {
			$('#newsletter-response').attr('class', 'wait').text('Моля изчакайте...').fadeIn('normal');
			//alert(ibeConfig.newsletterTarget);
			$.post(ibeConfig.newsletterTarget, { email: $('#newsletterEmail').attr('value'), go: $(this).attr('value') }, function(data) {
				if (data.code > 0) {
					$('#newsletter-response').attr('class', 'error');
				}
				else {
					$('#newsletter-response').removeAttr('class');
				}
				$('#newsletter-response').text(data.msg);
			}, 'json');
		}
		return false;
	}

	$('form.newsletter')
		.submit(function() { return false; }).end()
		.find('#newsletter-subscribe').click(newsletterSubscription).end()
		.find('#newsletter-unsubscribe').click(newsletterSubscription);
	
	// FAQ LIST 
	$('.faqq-sublist').hide();
	$('.faqq-category').livequery('click',function() {
		$(this).parent().parent().find('.faqq-category-selected').next().slideUp("normal");
		$(this).parent().parent().find('.faqq-category-selected').attr('class', 'faqq-category');
		
		$(this).attr('class', 'faqq-category-selected').next().slideDown("normal");
		
		
	});
	$('.faqq-category-selected').livequery('click', function() {
		$(this).attr('class', 'faqq-category');		
		$('.faqq-sublist').slideUp("normal");
	});
	
	$('#faqq-list').find('.faqq-sublist li.selected').parent().show().prev().attr('class', 'faqq-category-selected');
	
	$("#esky ul#faqq-list ul.faqq-sublist li").hover(
		function(){
			$(this).addClass("hover");
			
		},
		function(){
			$(this).removeClass("hover");
		}
	);
	
	
	// PROMOTION TABLE 
	$('table.promotions tr td').click(
		function(){
			document.location = $(this).parent('td:first a').attr('href');
		}
	)
	.hover(
		function(){$(this).parent().css('background','#fff');},
		function(){$(this).parent().css('background','none');}
	);	
	
	// flights info table
	
	$("table.FlightsinfoTable tr td[class^='gridTitle']").css('background','#fff');
	if($("table.FlightsinfoTable").length!=0){
		
	var table_1 = $("table.FlightsinfoTable").get(0);
	$(table_1).find("tr:not(:first) td").hover(
				function(){$(this).parent().children().css('background','#fff');},
				function(){$(this).parent().children().css('background','#F0F5F9');}
	);
	var table_2 = $("table.FlightsinfoTable").get(1);
	$(table_2).find("tr:not(:first) td").hover(
				function(){$(this).parent().children().css('background','#fff');},
				function(){$(this).parent().children().css('background','#F0F5F9');}
	);
	}
	//$("table.FlightsinfoTable tr:not(:first) td").css('border-bottom','1px dotted #ADB3B8');


	// CALENDAR 
	$('.datepicker-f')
	.unbind('click')
	.click(function(){
		$('#mask,.softbox,#fake').remove();
		if ($(this).hasClass('disabled')) {
			return false;
		}
		$(this).esky_calendar({
			thisInput:'ffrom',
			linkedInput:false,
			blockTo : new Date().zeroTime().addDays(1),
			allowSameDay : false,
			loop:2,
			fade: true,
			i18n : I18N_CalendarText
		});
		return false;
	});	
	
	$('.datepicker-t')
	.unbind('click')
	.click(function(){
		$('#mask,.softbox,#fake').remove();
		if ($(this).hasClass('disabled')) {
			return false;
		}
		$(this).esky_calendar({
			thisInput:'fto',
			linkedInput:'ffrom',
			blockTo : new Date().zeroTime().addDays(1),
			allowSameDay : false,
			loop:2,
			fade: true,
			i18n : I18N_CalendarText
		});
		return false;
	});
	
	$('a[rel="external"]').attr('target', '_blank');
    
	// AUTOCOMPLETE 
	var extraParams = new Array();
	extraParams['request'] = 'autocomplete';
	extraParams['encoding'] = 'utf-8';
	extraParams['language'] = 'bg';
	extraParams['callback'] = '?';
	
	$('input.airport').autocomplete(ibeConfig.autocomplete,{
		delay: 300,
		minChars: 3,
		matchSubset: 1,
		matchContains: 1,
		cacheLength: 10,
		autoFill: false,
		maxItemsToShow: 15,
		autoFillOne: true,
		formatItem: formatItem,
		extraParams: extraParams,
		formatResult: function(row) {
			return row[4]+", "+row[5]+" - "+row[3]+" ("+row[0]+")";
		}
	});
	
	$('a.map-button').unbind('click').destinator();

	
	$('#trip-type-selection label').click(function(){
		$('input:enabled', $(this)).click();
	});
	$('#qsf input[name=fly_trip_type]').click(function(){
		var $input = $(this);
		if ($input.not(':disabled'))
		{
			var mode = $input.val();
			$('#trip-type-selection label').removeClass('selected');
			$('li.' + mode + ' label').addClass('selected');
			if (mode == 'onewaytrip') {
				$('.out-date').hide();
				$('.datepicker-t').val('');
				
			}
			else {
				$('.out-date').show();
			}
		}
	});
	
	if ($('form.eskyform').size() > 0) {
		$(window).unload(function(){
			$('form.eskyform').saveQuery('oplFlights', (7 * 24 * 60 * 60 * 1000)); //Save for 7 days
		});
	}	
	
	$('form#contact').validate({
		filters : {
			'*' : 'Trim'
		},
		rules : {
			'*' : 'Required',			
			email : 'EmailAddress'
		},
		messages : {
			'*' : 'Wszystkie pola są wymagane.',
			email : 'Prosimy podać poprawny adres e-mail.'
		},
		display: function(data){
			$('div#contact-error').remove();
			$('.form-input-error').removeClass('form-input-error');
			if (!data) {
				return false;
			}
			$html = $('<div></div>').attr('id','contact-error')
				.append($('<h2></h2>').text('Błędne pola'))
				.append($('<ul></ul>'));
			
			$('form#contact').before($html);

			$errors = $('div#contact-error ul');
			for(index in data.label){
				data.label[index].addClass('form-input-error').data('error',data.message[index]);//.click(validationMessage);
				if (data.repeated[index] === false) {
					var title = data.label[index].attr('title');
					$errors.append($('<li></li>').html(data.message[index]+"<br/>")); // Leave <br>!!! Otherwise there is a strange error...
				}
			}
			window.scroll(0,0);			
		},
		options: {
			labelErrorClass: 'error',
			messagesErrorId: 'contact-error',
			breakChain: true,
			postAction : function(){
				$form = $(this);
				$form.append($('<input type="hidden" name="ajaxed" id="ajaxed" value="true"></input>'));
				$('button',$form).before($('<p></p>').attr('id','contact-form-sending').text('Wysyłanie...')).attr('disabled','disabled');//.fadeOut();

				$.ajax({
					url: $form.attr('action'),
					data: $form.serialize(),
					type: 'POST',
					success: function(a){
						if(a.response === true){					
							$html = $('<div></div>').attr('id','contact-success')
								.append($('<h2></h2>').text('Dziękujemy'))
								.append($('<p>Państwa wiadomość została do nas przesłana.<br/>Prosimy także pamiętać o naszej infolinii:</p>'))
								.append($('<div id="call-center-number"><span>0 801 303 420</span><br/>opłata tylko 0,35 PLN / min + VAT</div>'));						
							
							$text = $form.parent();
							$form.remove(); $('em.required').remove();
							$text.append($html);
						} else {
							$html = $('<div></div>').attr('id','contact-error')
								.append($('<h2></h2>').text('Błąd wysyłania'))
								.append($('<p>Przepraszamy, ale wysyłanie wiadomości nie powiodło się. Prosimy spróbować ponownie lub skorzystać z naszej infolinii.</p>'));							
							$('#contact-form-sending', $form).remove();
							$('button',$form).removeAttr('disabled');
							$form.before($html);
						}
					},
					error: function(){
						$html = $('<div></div>').attr('id','contact-error')
							.append($('<h2></h2>').text('Błąd wysyłania'))
							.append($('<p>Przepraszamy, ale wysyłanie wiadomości nie powiodło się. Prosimy spróbować ponownie lub skorzystać z naszej infolinii.</p>'));							
						
						$('#contact-form-sending', $form).remove();
						$('button',$form).removeAttr('disabled');
						//$('button',$form).show();
						$form.before($html);							
					}
				});
				return false;
			}
		}
	});
	
});

