var preloadedHoverImg = [];
var currentHover = null;
var mouseOverDivs = '<div id="TrainingMO" class="mainMO" style="display:none"></div>' +
					'<div id="RentalsMO" class="mainMO" style="display:none"></div>' +
					'<div id="ServiceMO" class="mainMO" style="display:none"></div>' +
					'<div id="SalesMO" class="mainMO" style="display:none"></div>' +
					'<div id="ProductionsMO" class="mainMO" style="display:none"></div>';

function Initialize()
{
	InitializeMainMenus();
	AdjustTransparentBanners();

	$('#baseBox').append('<div id="copyright">&copy; 2009-2010 Platinum Aviation Holdings</div>');

	$('body').supersleight();	// Transparency fix for displaying PNGs within IE6
}

function AdjustTransparentBanners()
{
	$('#topStripe').contents().wrapAll('<div class="opaqueContent"></div>').end().prepend('<div class="transparentBackground"></div>');
	$('.bottomImgBanner').contents().wrapAll('<div class="opaqueContent"></div>').end().prepend('<div class="transparentBackground"></div>');
/* 	$('#planeDetailsBanner').contents().wrapAll('<div class="opaqueContent"></div>').end().prepend('<div class="transparentBackground"></div>'); */

	AdjustTransparentBannerProps();
}

// Fix richiesto per visualizzare correttamente i banner traslucenti su Explorer 6

function AdjustTransparentBannerProps()
{
	$('.transparentBackground').each(function() {
		$(this).width($(this).parent().outerWidth(false))
			   .height($(this).parent().outerHeight(false));
	});
}

function InitializeMouseOvers()
{
	preloadedHoverImg[0] = new Image();
	preloadedHoverImg[0].src = "/img/rentalsOver.jpg";

	preloadedHoverImg[1] = new Image();
	preloadedHoverImg[1].src = "/img/trainingOver.jpg";

	preloadedHoverImg[2] = new Image();
	preloadedHoverImg[2].src = "/img/serviceOver.jpg";

	preloadedHoverImg[3] = new Image();
	preloadedHoverImg[3].src = "/img/productionsOver.jpg";

	preloadedHoverImg[4] = new Image();
	preloadedHoverImg[4].src = "/img/salesOver.jpg";

	$('#rightSide').prepend(mouseOverDivs);

	$('#Rentals').hover(
		function() { $('#RentalsMO').fadeIn(500); },
		function() { $('.mainMO:visible').fadeOut(500); }
	);

	$('#Training').hover(
		function() { $('#TrainingMO').fadeIn(500); },
		function() { $('.mainMO:visible').fadeOut(500); }
	);

	$('#Service').hover(
		function() { $('#ServiceMO').fadeIn(500); },
		function() { $('.mainMO:visible').fadeOut(500); }
	);

	$('#Productions').hover(
		function() { $('#ProductionsMO').fadeIn(500); },
		function() { $('.mainMO:visible').fadeOut(500); }
	);

	$('#Sales').hover(
		function() { $('#SalesMO').fadeIn(500); },
		function() { $('.mainMO:visible').fadeOut(500); }
	);
}

function MainHover(divID)
{
	if (currentHover)
		currentHover.fadeOut(500);

	if (divID.length > 0)
	{
		currentHover = $('#' + divID);
		currentHover.fadeIn(500);
	}
}

// Common Scroll Features

var scrollDone = true;
var totItems, scrolledItems;
var itemWidth;
var scrollJQ;

function InitializeAboutScroll(divID)
{
	scrollJQ = $('#' + divID);
	totItems = scrollJQ.find('ul li').size();
	scrolledItems = 0;
	itemWidth = scrollJQ.find('li:first').outerWidth(true);
	scrollJQ.css('width', (totItems * itemWidth) + "px");

	$('div.opaqueImgBanner span').each(function(idx) {
		var parentHeight = $(this).parent().innerHeight();
		var thisHeight = $(this).outerHeight(true);
		var vOffset = (parentHeight - thisHeight) / 2;
		$(this).css('top', vOffset + 'px');
	});
}

function InitializeAdventureScroll(divID, index)
{
	scrollJQ = $('#' + divID);
	totItems = scrollJQ.find('ul li').size();
	scrolledItems = index;
	itemWidth = scrollJQ.find('li:first').outerWidth(true);
	scrollJQ.css('width', (totItems * itemWidth) + "px");

	if (index > 0)
	{
		scrollJQ.css('margin-left', (parseInt(scrollJQ.css('margin-left')) - itemWidth * index) + "px");
		$('span:eq(0)').hide();
		$('span:eq(' + index + ')').show();
		$('div.mainDesc:eq(0)').hide();
		$('div.mainDesc:eq(' + index + ')').show();
	}

	$('#adventureWrapper div.bottomImgBanner span').each(function(idx) {
		var parentHeight = $(this).parent().innerHeight();
		var thisHeight = $(this).outerHeight(true);
		var vOffset = (parentHeight - thisHeight) / 2;
		$(this).css('top', vOffset + 'px');
	});
}

function InitializePlaneScroll(divID)
{
	scrollJQ = $('#' + divID);
	totItems = scrollJQ.find('ul li a').size();
	scrolledItems = 0;
	itemWidth = 249;	// scrollJQ.find('li:first a').outerWidth(true);
	scrollJQ.css('width', (totItems * itemWidth) + "px");
}

function InitializePictureScroll(divID)
{
	scrollJQ = $('#' + divID);
	totItems = scrollJQ.find('ul li a').size();
	scrolledItems = 0;
	itemWidth = 249;	// scrollJQ.find('li:first a').outerWidth(true);
	scrollJQ.css('width', (totItems * itemWidth) + "px");
}

// Scroll About Images

function ScrollAboutLeft(clickedElem)
{
	if (! scrollDone || scrolledItems + 1 == totItems)
		return;

	scrollDone = false;

	var amount = parseInt(scrollJQ.css('margin-left')) - itemWidth;

	scrollJQ.animate({marginLeft: amount + "px"}, 200, "linear", function() {
		$('span:eq(' + scrolledItems + ')').fadeOut(200, function() {
			$('span:eq(' + (scrolledItems + 1) + ')').fadeIn(200, function() {
				scrolledItems++;
				scrollDone = true;
			});
		});
	});
}

function ScrollAboutRight(clickedElem)
{
	if (! scrollDone || scrolledItems == 0)
		return;

	scrollDone = false;

	var amount = parseInt(scrollJQ.css('margin-left')) + itemWidth;

	scrollJQ.animate({marginLeft: amount + "px"}, 200, "linear", function(){
		$('span:eq(' + scrolledItems + ')').fadeOut(200, function() {
			$('span:eq(' + (scrolledItems - 1) + ')').fadeIn(200, function() {
				scrolledItems--;
				scrollDone = true;
			});
		});
	});
}

// Scroll Adventures Images

function ScrollAdventureLeft(clickedElem)
{
	if (! scrollDone || scrolledItems + 1 == totItems)
		return;

	scrollDone = false;

	InitializeSideMenu('adventures', 'Adv' + (scrolledItems + 1));

	var amount = parseInt(scrollJQ.css('margin-left')) - itemWidth;

	scrollJQ.animate({marginLeft: amount + "px"}, 200, "linear", function() {
		$('span:eq(' + scrolledItems + ')').fadeOut(200, function() {
			$('span:eq(' + (scrolledItems + 1) + ')').fadeIn(200, function() {
				$('div.mainDesc:eq(' + scrolledItems + ')').hide();
				$('div.mainDesc:eq(' + (scrolledItems + 1) + ')').show();
				scrolledItems++;
				scrollDone = true;
			});
		});
	});
}

function ScrollAdventureRight(clickedElem)
{
	if (! scrollDone || scrolledItems == 0)
		return;

	scrollDone = false;

	InitializeSideMenu('adventures', 'Adv' + (scrolledItems - 1));

	var amount = parseInt(scrollJQ.css('margin-left')) + itemWidth;

	scrollJQ.animate({marginLeft: amount + "px"}, 200, "linear", function() {
		$('span:eq(' + scrolledItems + ')').fadeOut(200, function() {
			$('span:eq(' + (scrolledItems - 1) + ')').fadeIn(200, function() {
				$('div.mainDesc:eq(' + scrolledItems + ')').hide();
				$('div.mainDesc:eq(' + (scrolledItems - 1) + ')').show();
				scrolledItems--;
				scrollDone = true;
			});
		});
	});
}

// Scroll Planes

function ScrollPlanesLeft(clickedElem)
{
	if (! scrollDone || scrolledItems + 3 == totItems)
		return;

	scrollDone = false;

	var amount = parseInt(scrollJQ.css('margin-left')) - itemWidth;

	scrollJQ.animate({marginLeft: amount + "px"}, 200, "linear", function() {
		scrolledItems++;
		scrollDone = true;
	});
}

function ScrollPlanesRight(clickedElem)
{
	if (! scrollDone || scrolledItems == 0)
		return;

	scrollDone = false;

	var amount = parseInt(scrollJQ.css('margin-left')) + itemWidth;

	scrollJQ.animate({marginLeft: amount + "px"}, 200, "linear", function() {
		scrolledItems--;
		scrollDone = true;
	});
}

// Scroll Pictures

function ScrollPicturesLeft(clickedElem, numItems)
{
	if (! scrollDone || scrolledItems + 5 == totItems)
		return;

	scrollDone = false;

	if (! numItems)
		numItems = 1;
	else if (scrolledItems + numItems > totItems)
		numItems = totItems - scrolledItems;

	var amount = parseInt(scrollJQ.css('margin-left')) - itemWidth * numItems;

	scrollJQ.animate({marginLeft: amount + "px"}, 300, "swing", function() {
		scrolledItems += numItems;
		scrollDone = true;
	});
}

function ScrollPicturesRight(clickedElem, numItems)
{
	if (! scrollDone || scrolledItems == 0)
		return;

	scrollDone = false;

	if (! numItems)
		numItems = 1;
	else if (scrolledItems - numItems < 0)
		numItems = scrolledItems;

	var amount = parseInt(scrollJQ.css('margin-left')) + itemWidth * numItems;

	scrollJQ.animate({marginLeft: amount + "px"}, 300, "swing", function() {
		scrolledItems -= numItems;
		scrollDone = true;
	});
}

// Contact form

function InitializeContactForm()
{
	$("#contactForm input[name='FirstName']")
		.add("#contactForm [name='LastName']")
		.add("#contactForm [name='Email']")
		.keyup(FormChanged);

	$("#contactForm input[type=checkbox][name='permission']").click(FormChanged);
}

function FormChanged()
{
	var totFilled = 0;
	var form = $("#contactForm");

	if (form.find("input[type=checkbox][name='permission']").attr('checked'))
	{
		if (form.find("input[name='FirstName']").eq(0).val().length > 0)
			++totFilled;
		
		if (form.find("input[name='LastName']").eq(0).val().length > 0)
			++totFilled;
		
		if (totFilled == 2)
		{
			var email = form.find("input[name='Email']").eq(0).val();
	
			if (email.length == 0)
			{
			}
			else if (! EmailCheck(email))
			{
				form.find("input[name='Email']").css('color','red');
			}
			else
			{
				form.find("input[name='Email']").css('color','black');
				++totFilled;
			}
		}
	}

	if (totFilled != 3)
	{
		form.find(":submit").attr('disabled','disabled');
	}
	else
	{
		form.find(":submit").removeAttr('disabled');
	}
}

function EmailCheck(str)
{
	return str.match(/[^@\s]+@[^@\s]+\.[^@\s]+/) != null;
//	return str.match(/[^\s@]+@[^\s@]+\.[^\s@]+/);

/*
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)

	return (str.indexOf(at) != -1 &&
			str.indexOf(at) != -1 && str.indexOf(at) != 0 && str.indexOf(at) != lstr &&
			str.indexOf(dot) != -1 && str.indexOf(dot) != 0 && str.indexOf(dot) != lstr &&
			str.indexOf(at, (lat + 1)) == -1 &&
			str.substring(lat - 1, lat) != dot && str.substring(lat + 1, lat + 2) != dot &&
			str.indexOf(dot, (lat + 2)) != -1 &&
			str.indexOf(" ") == -1);
*/
}

function FormToQueryObject(form)
{
	var query = {};

	$(form).find("input,select,textarea")
		   .each(function(i)
				{
					if (this.value && this.name && this.type != "button" && ((this.type != "radio" && this.type != "checkbox") || this.checked))
					{
						query[this.name] = this.value;
					}
				});

	return query;
}

function SubmitContactForm()
{
	$.ajax({
		cache: false,
		data: FormToQueryObject($('#contactForm').get(0)),
		dataType: 'html',
		type: 'POST',
		url: '/dynamic/contact.php',
		success: function(response, resultText)
		{
			if (response.length > 0)
			{
				$("#contactForm .submitError td").html(response).parent().show();
			}
			else
			{
				$("#contactForm .submitError").hide();
				$('#contactForm').hide();
				$('#postResult').show();
			}
		}
	});
}

// Home page animation

var frameList = [];
var frontDiv, backDiv;
var nextFrameDiv;
var frameIdx;
var timer;
var stopTimer;

function StartAnimation(remoteDirPath, imageDiv1, imageDiv2)
{
	// 1. ottenere la lista di immagini in dir, via AJAX
	// 2. precaricare le immagini in un loop
	// 3. assegnare la prima immagine al primo div e visualizzarlo, assegnandogli un z-index alto (100)
	// 4. nascondere il secondo div
	// 5. installare un timer per il prossimo aggiornamento, che dovrˆ:
	//		5.1. assegnare al div visibile un z-order basso (10)
	//		5.2. assegnare la prossima immagine al div nascosto, assegnargli un z-index alto (100) e visualizzarlo con un fadeIn
	//		5.3. al termine del fadeIn, nascondere il div con z-order basso

	// In pratica il timer di avvio del fadeIn sarˆ un timer "one time", ossia non periodico. Verrˆ installato dalla callback
	// di conclusione del fadeIn, in modo da lasciare un intervallo di pausa tra una slide e la prossima

		// Ottengo la lista delle immagini via AJAX

	$.ajax({
		data: { 'dir': remoteDirPath },
		dataType: 'json',
		url: '/dynamic/listSlides.php',
		error: function(request, status, error)
		{
			console.log('AJAX error status: ' + status);
		},
		success: function(frames, status)
		{
			frameList = [];

			for (var idx = 0; idx < frames.length; ++idx)
			{
				frameList[idx] = { image: new Image(), text: frames[idx].text };
				frameList[idx].image.src = frames[idx].image;
			}

			frontDiv = $('#' + imageDiv1);
			frontDiv.css('background-image', 'url(' + frameList[0].image.src + ')').show();

			backDiv = $('#' + imageDiv2);
			backDiv.show();

			nextFrameDiv = backDiv;

			frameIdx = 0;

			stopTimer = false;

			FadeDone();
		}
	});
}

function StopAnimation()
{
	if (frontDiv == undefined)
		return;

	frontDiv.stop();

	stopTimer = true;

	if (timer)
		clearTimeout(timer);
}

function StepAnimation()
{
	frameIdx = (frameIdx + 1) % frameList.length;	// Index of the next image to be shown

	if (nextFrameDiv == backDiv)
	{
			// The foreground div is visible, so I assign the new image to the back div and fade out the foreground one

		backDiv.css('background-image', 'url(' + frameList[frameIdx].image.src + ')');
		frontDiv.fadeOut(2000, FadeDone);
		nextFrameDiv = frontDiv;
	}
	else
	{
			// The foreground div is invisible, so I assign the new image to it and fade it in

		frontDiv.css('background-image', 'url(' + frameList[frameIdx].image.src + ')').fadeIn(2000, FadeDone);
		nextFrameDiv = backDiv;
	}
}

function FadeDone()
{
	if (stopTimer)
		return;

	$('#mainSloganSentence').fadeOut('fast', function() {
		$('#mainSloganSentence').html(frameList[frameIdx].text).fadeIn('fast', function() {
			timer = setTimeout("StepAnimation()", 2000);
		});
	});
}
