//ballh tarieven 
function calc_ballh_kosten()
{
  afleverwijze = $('input[name="afleverwijze"]:checked').val();	
  aantal_ballonnen = $('#calc_'+afleverwijze+' #aantal_ballonnen').attr('value');
  email = $('#email').attr('value');
  
  //Indien 50 of minder ballonnen.. adviseer wegwerpcilinder
 (aantal_ballonnen<51) ? $('.res_wegwerp_advies').css('display', '')  : $('.res_wegwerp_advies').css('display', 'none');
  
  ballh_kosten = Math.round((38+aantal_ballonnen*0.63)*100)/100;
  $('.res_ballh_kosten').hide().fadeIn(400).html('<strong>Kosten ballonnen en helium</strong><br /> Inclusief ballonnen, helium en snelsluiters:<br />' + ballh_kosten + ' euro incl. btw.');
  
  //deel deze prijsopgave
  $('#delen_calculator').delay(1000).fadeIn();
  
  if(afleverwijze=='ophalen' ){ 
	//in db
	$.ajax({
	  type: "POST",
	  url: "includes/insert_db_ballh_calc.php",
			data: "aantal_ballonnen="+ aantal_ballonnen +"& email="+ email +"& ballh_kosten="+ ballh_kosten,
	});
	//Mailen?
	if(email.length>1 && afleverwijze=='ophalen' ){
	  $.ajax({
		type: "POST",
		url: "includes/mail_calc.php",
			  data: "aantal_ballonnen="+ aantal_ballonnen +"& email="+ email +"& ballh_kosten="+ ballh_kosten,
		success: function(){
		  $('div.success').fadeIn(500).delay(3000).fadeOut(4000);
    	  //share actie delen in analytics
		  _gaq.push(['_trackEvent', 'Shares', 'Share', 'Email-non-Addthis', Number(aantal_ballonnen)]);
		}
	  });
	}
  }
  //event recorden in analytics:
  _gaq.push(['_trackEvent', 'Calculaties', 'Calculatie', 'ballh calculatie', Number(aantal_ballonnen)]);
  
  // aantal ballonnen state wijziging in url toepassen
  var state = {};
  state['aantal_ballonnen'] = aantal_ballonnen;
  $.bbq.pushState( state );
  $.cookie('aantal_ballonnen', aantal_ballonnen, { expires: 60, path: '/' });
  
  return ballh_kosten;
}

function calcDistances() {
  
  ballh_kosten = calc_ballh_kosten();
  $('.res_kosten_totaal').hide().fadeIn(400).html('<br /><strong>Een ogenblik geduld alstublieft..</strong>');
  
  var origin1 = new google.maps.LatLng(51.83692, 4.62646);
  var origin2 = new google.maps.LatLng(52.89364, 6.49411);
  var service = new google.maps.DistanceMatrixService();
  service.getDistanceMatrix(
	{
	  origins: [origin1, origin2],
	  destinations: [$('#afleveradres').attr('value')],
	  travelMode: google.maps.TravelMode.DRIVING,
	}, calcRetourafstand);
}

function calcRetourafstand(response, status) {
  var retourafstand = 0; 
  email = $('#email').attr('value');
  
  if (status != google.maps.DistanceMatrixStatus.OK) {
	alert('Er is een fout opgetreden, probeer het opnieuw.');
  } else {
	var origins = response.originAddresses;
	var destinations = response.destinationAddresses;
	var status_dest = response.rows[0].elements[0].status;
	if ( status_dest == "OK") { 
	  var distances = [];
	  //elke route doorlopen
	  for (var i = 0; i < origins.length; i++) {
		var results = response.rows[i].elements;
		for (var j = 0; j < results.length; j++) {
			distances.push(results[j].distance.value);
		}
	  }
	  var retourafstand = 2*(Math.min.apply( Math, distances )/1000).toFixed(2);
	  afleveradresGoogleFormat = destinations[0];
	  $('#afleveradres').val(afleveradresGoogleFormat);
	}
	else if ( status_dest == "NOT_FOUND") {
		alert('Bestemming niet gevonden, probeer het opnieuw.');
	}
	else {
		alert('Er kon geen route worden berekend');
	}
  }
 
  bezorgkosten = Math.round(Math.max(retourafstand*0.375+0.06*aantal_ballonnen,25)*100)/100;
  kosten_totaal = Math.round((ballh_kosten+bezorgkosten)*100)/100;
  
  //In het geval dat er een resultaat is uit maps.. :
  if(retourafstand>0){
	$('.res_bezorgkosten').hide().fadeIn(400).html('<strong>Bezorgkosten inclusief vullen</strong><br />' + bezorgkosten + ' euro (gebasseerd op retourafstand: ' + retourafstand + 'km)');
	$('.res_kosten_totaal').hide().fadeIn(400).html('<br /><strong>Totaalprijs</strong><br />' + kosten_totaal + ' euro incl. btw');
	
	//emailen?
	if(email.length>1){
	  $.ajax({
		type: "POST",
		url: "includes/mail_calc.php",
		data: "aantal_ballonnen="+ aantal_ballonnen +"& email="+ email +"& ballh_kosten="+ ballh_kosten +"& bezorgkosten="+ bezorgkosten +"& retourafstand="+ retourafstand +"& kosten_totaal="+ kosten_totaal +"& afleveradres="+ afleveradresGoogleFormat,
		success: function(){
		  $('div.success').fadeIn(500).delay(3000).fadeOut(4000);
  		  _gaq.push(['_trackEvent', 'Shares', 'Share', 'Email-non-Addthis', Number(aantal_ballonnen)]);
		}
	  });
	}
	//In database zetten..
	$.ajax({
	  type: "POST",
	  url: "includes/insert_db_ballh_calc.php",
		data: "aantal_ballonnen="+ aantal_ballonnen +"& email="+ email +"& ballh_kosten="+ ballh_kosten +"& bezorgkosten="+ bezorgkosten +"& retourafstand="+ retourafstand +"& kosten_totaal="+ kosten_totaal +"& afleveradres="+ afleveradresGoogleFormat,
	});
  }
  //Als er geen resultaat is uit maps.. 
  else {
	$('.res_bezorgkosten .res_kosten_totaal').hide().fadeIn(400).html('<strong>Bezorgkosten inclusief assistentie</strong><br />Er ging iets fout..');  }
  // Bestemming state wijziging in url toepassen
  var state = {};
  state['afleveradres'] = afleveradresGoogleFormat;
  $.bbq.pushState( state );
  $.cookie('afleveradres', afleveradresGoogleFormat, { expires: 60, path: '/' });
}

//Calculator
$(document).ready(function() {
  //on init.. positie window naar de calculator setten als er een hash is
  $.bbq.getState( 'afleverwijze' ) && $(window).scrollTop(Math.round($('#hb_calc').position().top)-100);
  
  var state = {};
  //get cookies en plaats eventueel in url
  if ($.cookie('aantal_ballonnen')) {  
    state['aantal_ballonnen'] = $.cookie('aantal_ballonnen');
  };
  if ($.cookie('afleveradres')) {  
    state['afleveradres'] = $.cookie('afleveradres');
  };
  if ($.cookie('afleverwijze')) {  
    state['afleverwijze'] = $.cookie('afleverwijze');
  }; 
  $.bbq.pushState( state );

  //cache default afleverwijze
  var cache = [];
  cache.afleverwijze = '';
  //hide addthis toolbox op klik van afleverwijze
  $('input[name="afleverwijze"]').click(function() {
    $(this).val() != 'per_cilinder' && $('#delen_calculator').hide();
  });
  
  // bij wijziging state afleverwijze
  $('input[name="afleverwijze"]').change(function() {
	//clear result divs
	$('.clear').css('display', 'none');
	afleverwijze = $(this+':checked').val();
	var state = {};
    state['afleverwijze'] = afleverwijze;
    $.bbq.pushState( state );
	$.cookie('afleverwijze', afleverwijze, { expires: 60, path: '/' });
  });
 
  //validatie form bezorgen
  $("#frm_bezorgen").validate({
	submitHandler: function() {
 	  calcDistances();
	}
  });

  //validatie form ophalen
  $("#frm_ophalen").validate({
	submitHandler: function() {
	  calc_ballh_kosten();
	}
  });	

  // Bind an event to window.onhashchange that, when the history state changes,
  // Set the states for all state elements
  $(window).bind( 'hashchange', function() {
	// Get the stats
	afleverwijzeHash = $.bbq.getState( 'afleverwijze' );
    aantalBallonnenHash = $.bbq.getState( 'aantal_ballonnen' );
	afleveradresHash = $.bbq.getState( 'afleveradres' );
	
	//if set, then set inputfield
	$.bbq.getState( 'aantal_ballonnen' ) && $('input[name="aantal_ballonnen"]').val($.bbq.getState( 'aantal_ballonnen' ));
	
	//if set, then set inputfield
	$.bbq.getState( 'afleveradres' ) && $('input[name="afleveradres"]').val($.bbq.getState( 'afleveradres' ));
	
	//if set, then set.
	if (afleverwijzeHash) {
	  //selecteer de juiste radio
	  $('input[name="afleverwijze"][value="'+afleverwijzeHash+'"]').attr('checked', true); 
	  //hide calcs en show de goede calc
	  $('.calc_part').hide();
	  $('#calc_'+afleverwijzeHash).show();

	  //als afleverwijze is veranderd, misschien submitten
	  if (cache.afleverwijze != afleverwijzeHash) {
		afleverwijzeHash=='ophalen' && Number(aantalBallonnenHash)>0 && $("#frm_ophalen").submit();  
		afleverwijzeHash=='bezorgen' && Number(aantalBallonnenHash)>0 && afleveradresHash && $("#frm_bezorgen").submit();
		//chache de nieuwe afleverwijze
		cache.afleverwijze = afleverwijzeHash;
	  }
	}
	
  });
  
  // Since the event is only triggered when the hash changes, we need to trigger
  // the event now, to handle the hash the page may have loaded with.
  $(window).trigger( 'hashchange' );

});
