// JavaScript Document

//extend jquery
jQuery.fn.verticalAlign = function(offset) {
    var obj = $(this[0]);
	if (offset == undefined) { offset = 0; }
	var container = obj.parent();
	var margintop = (((container.height() - obj.height()) / 2)+offset);
	container.height(container.height()-margintop);
	container.css('padding-top', margintop+'px');
};

//quotes variables
var current_quote = 0;
var total_quotes;;
var autoslide, restartautoslide;
var showTime = 3600;
var animationTime = 1000;
var restartAutoSlideTime = 10000;

$(document).ready(function() 
{
	
	//menu
	var menu = new Object();
	$('#menu img').each(function() 
	{
		if (!$(this).parent().hasClass("current-page"))
		{
			var name = $(this).attr('name');
			menu[name] = new Object();
			menu[name]['inactive'] = $(this).attr('src');
			menu[name]['active'] = $(this).attr('src').split(".jpg").join("-active.jpg");
			
			$(this).mouseover(function() {
				var name = $(this).attr('name');
				$(this).attr('src', menu[name]['active']);
			}).mouseout(function(){
				var name = $(this).attr('name');
				$(this).attr('src', menu[name]['inactive']);
			});

		}
	});
	
	//expand bars
	$('.expandbar .clickarea').click(function() 
	{
		var expandarea = $('.expandarea', $(this).parent());
		if( expandarea.is(':visible') ) 
		{
			//visible -> go close
			expandarea.slideUp();
			$(this).parent().css('background', 'url(/images/expandbar-bg.jpg) no-repeat');
		}
		else {
			//not visible -> go show
			expandarea.slideDown();
			$(this).parent().css('background', 'url(/images/expandbar-bg-up.jpg) no-repeat');
		}
		
	});
	
	
	//show first quote
	$('#quotes .q'+current_quote).css('top', '20px');
	
	total_quotes = $('#quotes li').size();
	
	if (total_quotes <= 1)
	{
		//hide buttons
		$('#previous-quote-btn').hide();
		$('#next-quote-btn').hide();
	}
	else
	{
		enableButtons(true);
		//start quotes slider
		startAutoSlide();
	}
	
	
	

	
	//form actions
	/*$('.rb-gender-wrapper').click(function()
	{
		$('.rb-gender').attr('src', getRelativePath()+'images/radio-button.gif');
		var img = $('.rb-gender', this);
		img.attr('src', getRelativePath()+'images/radio-button-selected.gif');
		gender = img.attr('name');
	});
	
	$('.rb-request-wrapper').click(function()
	{
		//$('.rb-request').attr('src', 'images/radio-button.gif');
		var img = $('.rb-request', this);
		if (request[img.attr('name')])
		{
			//was selected, -> deselect
			img.attr('src', getRelativePath()+'images/radio-button.gif');
			request[img.attr('name')] = false;
		}
		else
		{
			//was not selected -> select
			img.attr('src', getRelativePath()+'images/radio-button-selected.gif');
			request[img.attr('name')] = true;
		}		
	});*/
	
	$('.frequentiebox li').click(function()
	{
		$('.frequentiebox li').removeClass("selected");
		$(this).addClass("selected");
		frequence = $(this).html();
	});
	
	if ($('#page').val() == 'evenementen' || $('#page').val() == 'events')
	{
		var enddate = new Date();
		enddate.setFullYear(enddate.getFullYear()+5,11,31);
		setDatePicker('startdatum', 'startdatum-btn', (new Date()).asString(), enddate.asString(), 'einddatum', 'einddatum-btn', 'end');
		setDatePicker('einddatum', 'einddatum-btn', (new Date()).asString(), enddate.asString(), 'startdatum', 'startdatum-btn', 'start');	
	}
	
	$('#btn-send-quotation-form').click(function()
	{
		var errors = new Array();
		
		//reset feedback fields
		$('.form-feedback').html('');

		//check form
		if ($('#bedrijfsnaam').val() == "")
		{
			errors.push('bedrijfsnaam');
			$('#form-feedback-bedrijfsnaam').html(((lang == 'nl') ? "U heeft geen bedrijfsnaam ingevuld." : "You did not enter a company name."));
		}
		
		if ($('#contactpersoon').val() == "")
		{
			errors.push('contactpersoon');
			$('#form-feedback-contactpersoon').html(((lang == 'nl') ? "U heeft geen contactpersoon ingevuld." : "You did not enter a spokesperson."));
		}
		
		if ($('#straat').val() == "")
		{
			errors.push('straat');
			$('#form-feedback-straat').html(((lang == 'nl') ? "U heeft geen straat ingevuld." : "You did not enter a street."));
		}
		
		if ($('#postcode').val() == "")
		{
			errors.push('postcode');
			$('#form-feedback-postcode').html(((lang == 'nl') ? "U heeft geen postcode ingevuld." : "You did not enter a zipcode."));
		}
		
		if ($('#plaats').val() == "")
		{
			errors.push('plaats');
			$('#form-feedback-plaats').html(((lang == 'nl') ? "U heeft geen plaats ingevuld." : "You did not enter a city."));
		}
		
		if ($('#telefoonnummer').val() == "")
		{
			errors.push('telefoonnummer');
			$('#form-feedback-telefoonnummer').html(((lang == 'nl') ? "U heeft geen telefoonnummer ingevuld." : "You did not enter a phone number."));
		}
		
		if ($('#email').val() == "")
		{
			errors.push('email');
			$('#form-feedback-email').html(((lang == 'nl') ? "U heeft geen e-mailadres ingevuld." : "You did not enter an e-mailaddress."));
		} 
		else if (!validateEmail($('#email').val()))
		{
			errors.push('email');
			$('#form-feedback-email').html(((lang == 'nl') ? "U heeft geen geldig e-mailadres ingevuld." : "You did not enter a valid e-mailaddress."));
		}
		
		/*if (!request['offerte'] && !request['call'] && !request['demo'])
		{
			errors.push('request');
			$('#form-feedback-request').html("U heeft niet aangegeven of u een offerte wilt, gebeld wilt worden of interesse hebt in een demonstratie.");
		}
		else
		{*/
			if ($('#request-offerte').is(':checked'))
			{
				//different fields for bedrijven/company and evenementen/events
				if ($('#page').val() == 'bedrijven' || $('#page').val() == 'companies')
				{
					if ($('#medewerkers').val() == "")
					{
						errors.push('medewerkers');
						$('#form-feedback-medewerkers').html(((lang == 'nl') ? "U heeft het aantal medewerkers niet ingevuld." : "You did not enter the number of employees."));
					}
					
					if ($('#aard').val() == "")
					{
						errors.push('aard');
						$('#form-feedback-aard').html(((lang == 'nl') ? "U heeft de aard van de werkzaamheden niet ingevuld." : "You did not enter the nature of work."));
					}
					
					if (frequence == "anders, nl:" || frequence == "Other, namely")
					{
						if ($('#frequentie-anders').val() == "")
						{
							errors.push('frequentie-anders');
							$('#form-feedback-frequentie-anders').html(((lang == 'nl') ? "U heeft bij frequentie 'anders, nl:' aangegeven, maar niet toegelicht." : "You entered 'other, namely', but did not explain."));
						}
					}
				}
				else
				{
					if ($('#bezoekers').val() == "")
					{
						errors.push('bezoekers');
						$('#form-feedback-bezoekers').html(((lang == 'nl') ? "U heeft het aantal bezoekers niet ingevuld." : "You did not enter the number of visitors."));
					}
					
					if ($('#aard').val() == "")
					{
						errors.push('aard');
						$('#form-feedback-aard').html(((lang == 'nl') ? "U heeft de aard van het evenement niet ingevuld." : "You did not enter the nature of the event."));
					}
	
					var startdate = $('#startdatum').val();
					var enddate = $('#einddatum').val();
					//check dates
					var sdparts, edparts, checkstartend;
					checkstartend = true;
					startdate.split("/").join("-");
					enddate.split("/").join("-");
					startparts = startdate.split("-");
					endparts = enddate.split("-");
					if (startdate == '' || !isDate(startparts[1] + '-' + startparts[0] + '-' +  startparts[2])) {
						errors.push('startdatum');
						$('#form-feedback-startdatum').html(((lang == 'nl') ? "U heeft geen geldige startdatum voor het evenement ingevuld." : "You did not enter a valid startdate for the event."));
						checkstartend = false;
					}
					
					if (enddate == '' || !isDate(endparts[1] + '-' + endparts[0] + '-' +  endparts[2])) {
						errors.push('einddatum');
						$('#form-feedback-einddatum').html(((lang == 'nl') ? "U heeft geen geldige einddatum voor het evenement ingevuld." : "You did not enter a valid enddate for the event."));
						checkstartend = false;
					}
					if (startdate != '' && enddate != '' && checkstartend) {		
						startdate = new Date(startparts[2], startparts[1]-1, startparts[0]);		
						enddate = new Date(endparts[2], endparts[1]-1, endparts[0]);
						if (startdate > enddate){
							errors.push('startdatum');
							$('#form-feedback-startdatum').html(((lang == 'nl') ? "De startdatum van het evenement moet voor de einddatum liggen." : "The startdate of the event should be earlier than the enddate."));
						}
					}

				}
			}
			
		//}
		
		if (errors.length == 0)
		{
			//no errors -> send form
			
			$('#form-feedback-general').css('color','inherit');
			$('#form-feedback-general').css('font-style','italic');
			$('#form-feedback-general').css('font-weight','normal');
			$('#form-feedback-general').html("Gegevens versturen...");
			
			$.ajax({
				type: 'POST',
				data: {	page: $('#page').val(),
						bedrijfsnaam: $('#bedrijfsnaam').val(),
						contactpersoon: $('#contactpersoon').val(),
						gender: $("input[name='gender']:checked").val(),
						afdeling: $('#afdeling').val(),
						straat: $('#straat').val(),
						postcode: $('#postcode').val(),
						plaats: $('#plaats').val(),
						telefoonnummer: $('#telefoonnummer').val(),
						email: $('#email').val(),
						offerte: $('#request-offerte').is(':checked') ? 'true' : 'false',
						medewerkers: $('#medewerkers').val(), //voor bedrijven
						bezoekers: $('#bezoekers').val(), //voor evenementen
						aard: $('#aard').val(),
						frequence: frequence, //voor bedrijven
						frequentie_anders: $('#frequentie-anders').val(), //voor bedrijven
						startdatum: $('#startdatum').val(), //voor evenementen
						einddatum: $('#einddatum').val(), //voor evenementen
						call: $('#request-call').is(':checked') ? 'true' : 'false',
						demo: $('#request-demo').is(':checked') ? 'true' : 'false'
					  },
				url: getRelativePath()+"handle-form.php",
				success: function(response) {					
					if (response == 'OK') {
						$('#form-feedback-general').css('color','#008021');
						$('#form-feedback-general').css('font-style','normal');
						$('#form-feedback-general').css('font-weight','bold');
						$('#form-feedback-general').html(((lang == 'nl') ? "Uw gegevens zijn verstuurd. Bedankt voor uw interesse!" : "Your information has been sent. Thank you for your interest!"));
						$('#btn-clear-quotation-form').click();
					} else {
						//alert(response);
						$('#form-feedback-general').css('color','#d42758');
						$('#form-feedback-general').css('font-style','italic');
						$('#form-feedback-general').css('font-weight','normal');
						$('#form-feedback-general').html(((lang == 'nl') ? "Er is een technisch probleem opgetreden. Uw gegevens zijn niet verstuurd. Wij verzoeken u contact op te nemen met Back To Life via info@backtolife.nl." : "We're experiencing technical difficulties. Your information has not been sent. Please contact Back To Life through info@backtolife.nl"));
					}
				}
			});	
		}
		else
		{
			//errors in form -> show feedback
			/*var html = 'Het formulier is niet geheel correct ingevuld. We verzoeken u onderstaande zaken te corrigeren: <ul>';
			for (var i=0; i < errors.length; i++)
			{
				html += '<li>'+errors[i]+'</li>';
			}
			html += '</ul>';*/
			$('#form-feedback-general').css('color','#d42758');
			$('#form-feedback-general').css('font-style','italic');
			$('#form-feedback-general').css('font-weight','normal');
			$('#form-feedback-general').html(((lang == 'nl') ? "Het formulier is niet geheel correct ingevuld. We verzoeken u de aangegeven velden te corrigeren." : "The information you entered contains some errors. Please fix the highlighted fields."));
		}
		
	});
	
	$('#btn-clear-quotation-form').click(function()
	{
		$('#bedrijfsnaam').val('');
		$('#contactpersoon').val('');
		$('#gender-m').click();
		$('#afdeling').val('');
		$('#straat').val('');
		$('#postcode').val('');
		$('#plaats').val('');
		$('#telefoonnummer').val('');
		$('#email').val('');
		
		$('#request-offerte').attr('checked', true);
		$('#medewerkers').val('');
		$('#bezoekers').val('');
		$('#aard').val('');
		$('#startdatum').val('');
		$('#einddatum').val('');
		$('#freq-default').click();
		$('#frequentie-anders').val('');
		$('#request-call').attr('checked', false);
		$('#request-demo').attr('checked', false);
	});
	
	var path = getRelativePath();
	//preload rollover images
	var preload = new Array(
		//main menu nl
		path + 'images/menu-home-active.jpg',
		path + 'images/menu-bedrijven-active.jpg',
		path + 'images/menu-schiphol-active.jpg',
		path + 'images/menu-evenementen-active.jpg',
		path + 'images/menu-stoelmassage-active.jpg',
		path + 'images/menu-voetmassage-active.jpg',
		path + 'images/menu-aquamassage-active.jpg',
		path + 'images/menu-zuurstofbar-active.jpg',
		//main menu en
		path + 'images/menu-companies-active.jpg',
		path + 'images/menu-events-active.jpg',
		path + 'images/menu-chairmassage-active.jpg',
		path + 'images/menu-footmassage-active.jpg',
		path + 'images/menu-oxygenbar-active.jpg'.
		//language
		path + 'images/nl-active.gif',
		path + 'images/en-active.gif',
		//misc
		path + 'images/expandbar-bg-up.jpg'
	);
	preloadImages(preload);
		
});


function preloadImages() {
	var images = preloadImages.arguments;
	for (var i=0; i < images.length; i++) {
		if (isArray(images[i])) {
			for (var j=0; j < images[i].length; j++) {
				loadedImage = new Image(); 
				loadedImage.src = images[i][j];
			}
		} else {
			loadedImage = new Image(); 
			loadedImage.src = images[i];
		}
	}
}

function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function validateEmail(address) {
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	return reg.test(address);
}

//quotes slider functions

function enableButtons(enable)
{
	if (enable)
	{
		//previous button
		$('#previous-quote-btn').click(function() 
		{
			clearInterval(autoslide);
			clearInterval(restartautoslide);
			
			previousQuote();
			
			restartautoslide = setTimeout(function()
			{
				nextQuote();
				startAutoSlide();
			}, restartAutoSlideTime+(2*animationTime));
			
		});
		
		//next button
		$('#next-quote-btn').click(function() 
		{
			clearInterval(autoslide);
			clearInterval(restartautoslide);
			
			nextQuote();
			
			restartautoslide = setTimeout(function()
			{
				nextQuote();
				startAutoSlide();
			}, restartAutoSlideTime+(2*animationTime));

		});
	}
	else
	{
		$('#previous-quote-btn').unbind('click');
		$('#next-quote-btn').unbind('click');
	}
}

function nextQuote()
{
	enableButtons(false);
	//slide old quote out
	$('#quotes .q'+current_quote).animate({
		top: '+=240'
	}, animationTime, function() 
	{
		// Animation complete.
		//get new quote
		var next_quote = current_quote + 1;
		if (next_quote >= total_quotes) { next_quote = 0; }
		current_quote = next_quote;
		//slide new quote in
		$('#quotes .q'+current_quote).css('top','-240px');
		$('#quotes .q'+current_quote).animate({
			top: '+=260'
		}, animationTime, function()
		{
			enableButtons(true);
		});
	});
}

function previousQuote()
{
	enableButtons(false);
	//slide old quote out
	$('#quotes .q'+current_quote).animate({
		top: '+=240'
	}, animationTime, function() 
	{
		// Animation complete.
		//get new quote
		var previous_quote = current_quote - 1;
		if (previous_quote < 0) { previous_quote = total_quotes-1; }
		current_quote = previous_quote;
		//slide new quote in
		$('#quotes .q'+current_quote).css('top','-240px');
		$('#quotes .q'+current_quote).animate({
			top: '+=260'
		}, animationTime, function()
		{
			enableButtons(true);
		});
	});
}



function startAutoSlide()
{
	autoslide = setTimeout(function()
	{
		nextQuote();
		startAutoSlide();
	}, showTime+(2*animationTime));
}

function getRelativePath() {	
	var path_name = document.location.pathname;
	//rootdir in index.php
	path_name = path_name.replace(rootdir,'');	
	var path_items = path_name.split("/");
	var rel_path = '';
	for (var i = 0; i < path_items.length-1; i++) {
		rel_path += '../';
	}
	return rel_path;
}

function setDatePicker(fieldId, buttonId, startDate, endDate, otherFieldId, otherButtonId, otherType) {
	$('#'+buttonId)
		.datePicker(
					{
						createButton:false,
						startDate: startDate,
						endDate: endDate
					}
		)
		.unbind('click')
		.bind(
			'click',
			function()
			{
				$(this).dpDisplay();
				this.blur();
				return false;
			}
		)
		.unbind('dateSelected')
		.bind(
			'dateSelected',
			function(e, selectedDate, $td)
			{
				//set date
				var d = selectedDate.getDate();
				if (d < 10) d = "0"+d;
				var m = selectedDate.getMonth()+1;
				if (m < 10) m = "0"+m;
				var y = selectedDate.getFullYear();
				$('#'+fieldId).val(d+'-'+m+'-'+y);
				//make sure other date box can only select right dates
				var enddate = new Date();
				enddate.setFullYear(enddate.getFullYear()+5,11,31);
				if (otherType == 'start') {
					setDatePicker(otherFieldId, otherButtonId, (new Date()).asString(), (d+'/'+m+'/'+y), fieldId, buttonId, 'end');
				} else {
					setDatePicker(otherFieldId, otherButtonId, (d+'/'+m+'/'+y), enddate, fieldId, buttonId, 'start');
				}
			}
		);
}


function isDate(dateStr) {
	//dateStr -> mm/dd/yyyy or mm-dd-yyyy
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?
	
	if (matchArray == null) {
		return false;
	}

	month = matchArray[1];
	day = matchArray[3];
	year = matchArray[5];
	
	if (month < 1 || month > 12) {
		return false;
	}
	
	if (day < 1 || day > 31) {
		return false;
	}
	
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		return false;
	}
	
	if (month == 2) { 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) {
			return false;
		}
	}
	return true;
}
