// General Functions

function PadDigits(n, totalDigits) {	n = n.toString();	var pd = ''; 	if (totalDigits > n.length)	{		for (i=0; i < (totalDigits-n.length); i++)		{			pd += '0';		}	}	return pd + n.toString();}

// Initialisation

//// Objects in External Files

/*
journeyErrors = new Warning;

journeyErrors.addErrMsg(0,"i am err msg 0");
journeyErrors.addErrMsg(1,"i am err msg 1");
journeyErrors.addErrMsg(2,"i am err msg 2");
journeyErrors.addErrMsg(3,"i am err msg 3");
journeyErrors.addErrMsg(4,"i am err msg 4");

journeyErrors.changeErrState(2);
journeyErrors.changeErrState(3);

journeyErrors.throwErrMsgs("alert");
*/

//// Date and Time

var d = new Date();

var fromDay = d.getDate();
var fromMonth = (d.getMonth() + 1);
var fromYear = d.getFullYear();
var fromHour = d.getHours();
var fromMin = d.getMinutes();

//// Guest Address

var fromStreet = "Strasse";
var fromCity = "Stadt";
var fromCountry = "Land";

//// Host Address

var toStreet = "Zeutschach 38";
var toCity = "Zeutschach";
var toCountry = "Austria";

//// The Options for the User

var desiredService;


// The Functions


function start (update, focusToElement) {
	if (update == "update") {
		fillForm ();
	}
	focusTo(focusToElement);
}

function focusTo(id) {
	document.getElementById(id).focus();
}

function fillForm () {
	
	var fromDay = d.getDate();
	var fromMonth = (d.getMonth() + 1);
	var fromYear = d.getFullYear();
	var fromHour = d.getHours();
	var fromMin = d.getMinutes();
	
	document.getElementById("fromDay").value = PadDigits (fromDay, 2);
	document.getElementById("fromMonth").value = PadDigits (fromMonth, 2);
	document.getElementById("fromYear").value = PadDigits (fromYear, 4);
	document.getElementById("fromHour").value = PadDigits (fromHour, 2);
	document.getElementById("fromMin").value = PadDigits (fromMin, 2);
}


function readForm () {
	
	// Read the Form
	// Where does the guest come from, which service does the guest want to see?
	
	fromStreet = document.getElementById("fromStreet").value
	fromCity = document.getElementById("fromCity").value
	fromCountry = document.getElementById("fromCountry").value
	fromDay = document.getElementById("fromDay").value
	fromMonth = document.getElementById("fromMonth").value
	fromYear = document.getElementById("fromYear").value
	fromHour = document.getElementById("fromHour").value
	fromMin = document.getElementById("fromMin").value
	desiredService = document.getElementById("desiredService").value
	
}

function check (showErr) {
	
	readForm();
	
	// Here one could place an instance generic showErrorMsg prototype, but I use a simple solution instead
	
	// msg is a container for error messages, which is shown if errorHasOccured == 1
	
	var msg = "";
	var errorHasOccured = 0;
	
	// Checking the Form for Integrity
	
	if ((fromDay >= 1) && (fromDay <= 31)) {
	}
	else {
		errorHasOccured = 1;
		msg += "Geben Sie für den Tag einen Wert zwischen 1-31 ein.\n";	
	}
	
	if ((fromMonth >= 1) && (fromMonth <= 12)) {
	}
	else {
		errorHasOccured = 1;
		msg += "Geben Sie für das Monat einen Wert zwischen 1-12 ein.\n";
	}

	if ((fromHour >= 0) && (fromHour <= 23)) {
	}
	else {
		errorHasOccured = 1;
		msg += "Geben Sie für die Stunde einen Wert zwischen 0-23 ein.\n";
	}
	
		if ((fromMin >= 0) && (fromMin <= 59)) {
	}
	else {
		errorHasOccured = 1;
		msg += "Geben Sie für die Minuten einen Wert zwischen 0-59 ein.\n";
	}
	
	if ( (errorHasOccured == 1) && (showErr == 1) ) {
		alert(msg);
	}
	
	if (errorHasOccured == 1) {
		return 1;
	}
	else if (errorHasOccured == 0) {
		return 0;
	}
	
}

	
function journey() {
	var errMsg = check(0);
	if (errMsg) {
		check(1);
	}
	else {
	
		// Open the selected service with the user submitted data
		
		switch (desiredService) {
				
			case "googleroute":
				location.href = ( encodeURI (
					
					"http://maps.google.de/maps?" +
					
					"saddr=" +
					
					fromStreet + ", " +
					fromCity + ", " +
					fromCountry +
					
					"&daddr=" +
					
					toStreet + ", " +
					toCity + ", " +
					toCountry +
					
					"&hl=de" +
					
					"&f=li&om=1"
					
					// + "&z=8" // let google decide about the zoom level, so that start and destiniation fit onto the screen
					
				));
				break;
	
			case "oebbroute":
				location.href = ( encodeURI (
					
					"http://www.oebb.at/vip8/pv/de/Servicebox/Fahrplanabfrage/index.jsp?" +
					
					"S=" +
					fromCity +
	
					"&Z=" +
					"Neumarkt+in+Stmk" +
					
					"&REQ0JourneyDate=" +
					fromDay + "." + fromMonth + "." + fromYear +
					
					"&time=" +
					fromHour + "." + fromMin +
	
					"&timesel=depart=" +
	
					"&ld=oebb&start=1"
					
				));				
				break;
	
			case "mappymap":
				alert("Mappy can currently not be used");
				break;
				
			case "googlemap":
				location.href = ( encodeURI (
					
					"http://maps.google.de/maps?" +
					
					"q=" +
					toStreet + ", " +
					toCity + ", " +
					toCountry +
					
					"&hl=de" +
					
					"&f=q&om=1&iwloc=addr&z=12"
					
				));
				break;
				
				
			default:
				alert("The Service you requested cannot be served at the moment");
		}
	}
}