var Buscharter = {
	lng : "",
	
	countParticipants : 0,
	
	last_hin_von : 0,
	last_hin_bis : 0,
	last_hin_time : 0,
	last_rueck_von : 0,
	last_rueck_bis : 0,
	last_rueck_time : 0,
	
	countChild : 0,
	countAdult : 0,
	
	hin_oneway_child : 0.00,
	hin_oneway : 0.00,
	hin_daypass : 0.00,
	rueck_oneway_child : 0.00,
	rueck_oneway : 0.00,
	rueck_daypass : 0.00,
	sumChild : 0.00,
	sumAdult : 0.00,
	sumAll : 0.00,
	
	rabatt : 0.00,
	discountSize : 0,
	countRabatt : 0,
	
	tickettype : "oneway",
	
	constants : {
		de : {
			handycapAlert : "Bitte rufen Sie uns an 06543 50 19 24",
			addReturn : "R&uuml;ckfahrt hinzuf&uuml;gen",
			removeReturn : "R&uuml;ckfahrt entfernen",
			mAnrede : "Herr",
			fAnrede : "Frau",
			remove : "entfernen",
			oneway : "Einzelticket",
			daypass : "Tagesticket (24h)",
			success : "<p class=\"success\">Vielen Dank f&uuml;r Ihre Reservierung! Sie erhalten eine Best&auml;tigung per Email.</p>"
		},
		
		en : {
			handycapAlert : "Please call us 06543 50 19 24",
			addReturn : "Add Return Journey",
			removeReturn : "Remove Return Journey",
			mAnrede : "Mr.",
			fAnrede : "Mrs.",
			remove : "remove",
			oneway : "Oneway",
			daypass : "Daypass (24h)",
			success : "<p class=\"success\">Thank you for your reservation! You will receive a Confirmation- Email.</p>"
		},
		
		it : {
			handycapAlert : "Please call us 06543 50 19 24",
			addReturn : "Add Return Journey",
			removeReturn : "Remove Return Journey",
			mAnrede : "Mr.",
			fAnrede : "Mrs.",
			remove : "remove",
			oneway : "Oneway",
			daypass : "Daypass (24h)",
			success : "<p class=\"success\">Thank you for your reservation! You will receive a Confirmation- Email.</p>"
		}
	},
	
	toggleReturn : function() {
		if( $("#rueckfahrt").is(":hidden") )
		{
			$("#rueck_date").val($("#hin_date").val());
			this.last_rueck_von = $("#hin_bis").val();
			this.last_rueck_bis = $("#hin_von").val();
			
			this.loadConnections("rueck");
			
			$("#rueckfahrt").slideDown("normal");
			$("#toggleReturnLink").html(this.constants[this.lng].removeReturn);
			$("#bookReturn").val("1");
		}
		else
		{
			$("#rueckfahrt").slideUp("normal");
			$("#toggleReturnLink").html(this.constants[this.lng].addReturn);
			$("#bookReturn").val("0");
			
			this.rueck_oneway_child = 0.00;
			this.rueck_oneway = 0.00;
			this.rueck_daypass = 0.00;
		}
		
		this.calculate();
	},
	
	loadConnections : function(field) {
		var datum = $("#"+field+"_date").val();
		var lng = $("#lng").val();
		
		$.ajax({
			type: "POST",
			url: "../ajax/loadConnections.php",
			data: "datum="+datum+"&lng="+lng,
			dataType: "html",
			success: function(r){
				$("#"+field+"_von").html(r);
				Buscharter.setSelectConnection(field);
				Buscharter.loadStops(field);
				//Buscharter.calculate();
			}
		});
	},
	
	loadStops : function(field) {
		var datum = $("#"+field+"_date").val();
		var lng = $("#lng").val();
		var station_id = $("#"+field+"_von").val();
		
		$.ajax({
			type: "POST",
			url: "../ajax/loadStops.php",
			data: "datum="+datum+"&lng="+lng+"&station_id="+station_id,
			dataType: "html",
			success: function(r){
				$("#"+field+"_bis").html(r);
				Buscharter.setSelectStop(field);
				Buscharter.loadTimes(field);
				//Buscharter.calculate();
			}
		});
	},
	
	loadTimes : function(field) {
		var datum = $("#"+field+"_date").val();
		var von_id = $("#"+field+"_von").val();
		var bis_id = $("#"+field+"_bis").val();
		
		$.ajax({
			type: "POST",
			url: "../ajax/loadTimes.php",
			data: "datum="+datum+"&von_id="+von_id+"&bis_id="+bis_id,
			dataType: "html",
			success: function(r){
				$("#"+field+"_time").html(r);
				Buscharter.setSelectTime(field);
				Buscharter.calculate();
			}
		});
	},
	
	setSelectConnection : function(field) {
		if(field == "hin" && this.last_hin_von > 0)
		{
			$("#"+field+"_von option[value='"+this.last_hin_von+"']").attr("selected", "selected");
		}
		else if(field == "rueck" && this.last_rueck_von > 0)
		{
			$("#"+field+"_von option[value='"+this.last_rueck_von+"']").attr("selected", "selected");
		}
	},
	
	setSelectStop : function(field) {
		if(field == "hin" && this.last_hin_bis > 0)
		{
			$("#"+field+"_bis option[value='"+this.last_hin_bis+"']").attr("selected", "selected");
		}
		else if(field == "rueck" && this.last_rueck_bis > 0)
		{
			$("#"+field+"_bis option[value='"+this.last_rueck_bis+"']").attr("selected", "selected");
		}
	},
	
	setSelectTime : function(field) {
		if(field == "hin" && this.last_hin_time > 0)
		{
			$("#"+field+"_time option[value='"+this.last_hin_time+"']").attr("selected", "selected");
		}
		else if(field == "rueck" && this.last_rueck_time > 0)
		{
			$("#"+field+"_time option[value='"+this.last_rueck_time+"']").attr("selected", "selected");
		}
	},
	
	addParticipant : function(sex, name, surname, child) {
		var id = ++this.countParticipants;
		
		var mcheck = "";
		var fcheck = "";
		
		switch(sex)
		{
			case "m"	:	mcheck = ' selected="selected"';	break;
			case "f"	:	fcheck = ' selected="selected"';	break;
			default		:	mcheck = ' selected="selected"';
		}
		
		name = typeof(name) == "undefined" ? "" : name;
		surname = typeof(surname) == "undefined" ? "" : surname;
		child = child == true ? ' checked="checked"' : "";
		
		$("#participant").append('<div id="par_' + id + '" class="participant">' +
							'<select name="anrede_' + id + '" id="anrede_' + id + '">' +
							  	'<option value="m"' + mcheck + '>' + this.constants[this.lng].mAnrede +'</option>' +
								'<option value="f"' + fcheck + '>' + this.constants[this.lng].fAnrede +'</option>' +
							'</select>' +
							'<input type="text" name="vorname_' + id + '" id="vorname_' + id + '" value="' + name + '" />' +
							'<input type="text" name="nachname_' + id + '" id="nachname_' + id + '" value="' + surname + '" />' +
							'<input type="checkbox" name="child_' + id + '" id="child_' + id + '" class="child" onclick="Buscharter.calculate();"' + child + ' />' +
							'<a href="javascript:Buscharter.removeParticipant(\'par_' + id + '\');">' + this.constants[this.lng].remove +'</a>' +
						'</div>');
		this.calculate();
	},
	
	removeParticipant : function(elmID) {
		$("#"+elmID).remove();
		
		this.countParticipants--;
		this.calculate();
	},
	
	addContactAsParticipant : function() {
		this.addParticipant( $("#kon_anrede option:selected").val(), $("#kon_vorname").val(), $("#kon_nachname").val() );
	},
	
	calculate : function() {
		$("form#buscharter :input").attr("disabled", "disabled");
		
		this.checkDaypass();
		if( this.validateDate($("#hin_date").val()) && $("#hin_von option:selected").val() > 0 && $("#hin_bis option:selected").val() > 0 && $("#hin_time option:selected").val() > 0 )
		{
			$.ajax({
				type: "POST",
				url: "../ajax/loadPrices.php",
				data: "type=hin&cid="+$("#hin_time option:selected").val()+"&station_id="+$("#hin_bis option:selected").val(),
				dataType: "xml",
				success: function(r){
					Buscharter.parsePrices(r, "hin");
					Buscharter.printPrices();
				}
			});
			
			if( this.isReturnBooked() == true )
			{
				$.ajax({
					type: "POST",
					url: "../ajax/loadPrices.php",
					data: "type=rueck&cid="+$("#rueck_time option:selected").val()+"&station_id="+$("#rueck_bis option:selected").val(),
					dataType: "xml",
					success: function(r){
						Buscharter.parsePrices(r, "rueck");
						Buscharter.printPrices();
					}
				});
			}
		}
		
		$("form#buscharter :input").removeAttr("disabled");
	},
	
	printPrices : function() {
		var hinfahrt_preis = this.tickettype == "oneway" ? this.hin_oneway : this.hin_daypass;
		var rueckfahrt_preis = this.tickettype == "oneway" && this.isReturnBooked() == true ? this.rueck_oneway : 0.00;
		
		$("#countChild").html(this.countChild + "");
		$("#singlePriceChild").html(this.hin_oneway_child.toFixed(2) + " &euro;<br />" + this.rueck_oneway_child.toFixed(2) + " &euro;");
		$("#sumPriceChild").html(this.sumChild.toFixed(2) + " &euro;");
		
		$("#countAdult").html(this.countAdult + "");
		$("#singlePriceAdult").html(hinfahrt_preis.toFixed(2) + " &euro;<br />" + rueckfahrt_preis.toFixed(2) + " &euro;");
		$("#sumPriceAdult").html(this.sumAdult.toFixed(2) + " &euro;");
		
		$("#tickettype").html(this.tickettype == "oneway" ? this.constants[this.lng].oneway : this.constants[this.lng].daypass);
		$("#sumAll").html(this.sumAll.toFixed(2) + " &euro;");
		
		if(this.rabatt > 0)
		{
			$("#rabattPrice").html(this.rabatt.toFixed(2) + " &euro;");
			$("#rabattField").show();
		}
		else
		{
			$("#rabattField").hide();
		}
	},
	
	parsePrices : function(xml, strecke) {
		this.countChild = $(".participant input:checked").length;
		this.countAdult = this.countParticipants - this.countChild;
		
		if(strecke == "hin")
		{
			this.hin_oneway_child = parseFloat($(xml).find("oneway_child").text());
			this.hin_oneway = parseFloat($(xml).find("oneway").text());
			this.hin_daypass = parseFloat($(xml).find("daypass").text());
		}
		else
		{
			this.rueck_oneway_child = parseFloat($(xml).find("oneway_child").text());
			this.rueck_oneway = parseFloat($(xml).find("oneway").text());
			this.rueck_daypass = parseFloat($(xml).find("daypass").text());
		}
		
		this.discountSize = parseInt($(xml).find("discount_size").text()) + 0;
		//this.countRabatt = parseInt(this.countParticipants / this.discountSize);
		this.countRabatt = this.discountSize > 0 ? parseInt(this.countAdult / this.discountSize) : 0;
		
		this.sumChild = this.countChild * (parseFloat(this.hin_oneway_child) + parseFloat(this.rueck_oneway_child));
		if(this.tickettype == "oneway")
		{
			this.sumAdult = this.countAdult * (parseFloat(this.hin_oneway) + parseFloat(this.rueck_oneway));
			this.rabatt = this.countRabatt * (parseFloat(this.hin_oneway) + parseFloat(this.rueck_oneway));
		}
		else
		{
			this.sumAdult = this.countAdult * parseFloat(this.hin_daypass);
			this.rabatt = this.countRabatt * parseFloat(this.hin_daypass);
		}
		
		this.sumAll = this.sumChild + this.sumAdult - this.rabatt;
	},
	
	isReturnBooked : function() {
		if( this.validateDate($("#rueck_date").val()) && $("#rueck_von option:selected").val() > 0 && $("#rueck_bis option:selected").val() > 0 && $("#rueck_time option:selected").val() > 0 && $("#bookReturn").val() == "1" )
		{
			return true;
		}
		return false;
	},
	
	checkDaypass : function() {
		if(this.isReturnBooked() == true)
		{
			$.ajax({
				type: "POST",
				url: "../ajax/checkDaypass.php",
				data: "hin_date="+Buscharter.toDate($("#hin_date").val())+"&hin_time="+$("#hin_time option:selected").text()+"&rueck_date="+Buscharter.toDate($("#rueck_date").val())+"&rueck_time="+$("#rueck_time option:selected").text(),
				dataType: "text",
				success: function(r){
					Buscharter.tickettype = r;
				}
			});
		}
		else
		{
			this.tickettype = "oneway";
		}
	},
	
	validateDate : function(datum) {
		var now = new Date();
		if( datum.match(/^(\d{2})\.(\d{2})\.(\d{4})$/) )
		{
			return this.validateDate( this.toDate(datum) );
		}
		else if( datum.match(/^(\d{4})-(\d{2})-(\d{2})$/) )
		{
			//return datum >= (now.getFullYear() + "-" + (now.getMonth()+1) + "-" + now.getDate());
			return true;
		}
		return false;
	},
	
	toDate : function(datum) {
		var result = /^(\d{2})\.(\d{2})\.(\d{4})$/.exec(datum);
		
		if( result != null )
		{
			return result[3] + "-" + result[2] + "-" + result[1];
		}
		return false;
		
	},
	
	/*checkHandicap : function() {
		if( $("#kon_rollstuhl").attr("checked") )
		{
			$.ajax({
				type: "POST",
				url: "../ajax/checkHandicap.php",
				data: "hin_date="+Buscharter.toDate($("#hin_date").val())+"&hin_time="+$("#hin_time option:selected").text(),
				dataType: "text",
				success: function(r){
					if(r == "1")
						alert(Buscharter.constants[Buscharter.lng].handycapAlert);
				}
			});
		}
	},*/
	
	validateForm : function() {
		
		$("#count-error").hide();
		
		if(this.countParticipants == 0)
		{
			this.addContactAsParticipant();
		}
		
		if (this.countParticipants < 10)
		{
			$("#count-error").show();
			return;
		}
		
		$("form#buscharter :input").attr("disabled", "disabled");
		
		//var rollstuhl = $("#kon_rollstuhl").attr("checked") ? 1 : 0;
		var rollstuhl = 0;
		var newsletter = $("#kon_newsletter").attr("checked") ? 1 : 0;
		
		var data = "bookReturn=" + $("#bookReturn").val() +
					"&lng=" + this.lng +
					"&kon_anrede=" + this.constants[this.lng][$("#kon_anrede option:selected").val() + "Anrede"] +
					"&kon_vorname=" + $("#kon_vorname").val() +
					"&kon_nachname=" + $("#kon_nachname").val() +
					"&kon_email=" + $("#kon_email").val() +
					"&kon_rollstuhl=" + rollstuhl +
					"&kon_newsletter="  + newsletter +
					"&hin_date=" + this.toDate($("#hin_date").val()) +
					"&hin_von=" + $("#hin_von option:selected").val() +
					"&hin_bis=" + $("#hin_bis option:selected").val() +
					"&hin_time=" + $("#hin_time option:selected").text() +
					"&hin_cid=" + $("#hin_time option:selected").val() +
					"&rueck_date=" + this.toDate($("#rueck_date").val()) +
					"&rueck_von=" + $("#rueck_von option:selected").val() +
					"&rueck_bis=" + $("#rueck_bis option:selected").val() +
					"&rueck_time=" + $("#rueck_time option:selected").text() +
					"&rueck_cid=" + $("#rueck_time option:selected").val();
		
		for(var i=1; i<=this.countParticipants; i++)
		{
			var child = $("#child_"+i).attr("checked") ? 1 : 0;
			data += "&anrede_"+i+"="+this.constants[this.lng][$("#anrede_"+i+" option:selected").val() + "Anrede"] +
					"&vorname_"+i+"="+$("#vorname_"+i).val() +
					"&nachname_"+i+"="+$("#nachname_"+i).val() +
					"&child_"+i+"="+child;
		}
		
		$.ajax({
			type: "POST",
			url: "../ajax/validateForm.php",
			data: data,
			dataType: "xml",
			success: function(r){
				$(".errors").removeClass("errors");
				Buscharter.parseResult(r);
				$("form#buscharter :input").removeAttr("disabled");
			}
		});
	},
	
	parseResult : function(data) {
		if( $(data).find("success").length > 0 )
		{
			this.printSuccess();
		}
		else
		{
			$(data).find("errors > *").each(function() {
				$("#"+this.nodeName.toLowerCase()).addClass("errors");
			});
		}
	},
	
	printSuccess : function() {
		$("#buscharter").remove();
		$("#content").append(this.constants[this.lng]["success"]);
	}
};
