/*
	validateForm.js
	
	validates RequestForm before its data is processed
	
	Author: Felix Geenen
	Date  : 01.12.2009

*/

// validates if all required fields are set ordinary
function validateForm() {
	
	// vars
	var returnString = '';
	
	// field values
	var day      = val('day');
	var month    = val('month');
	var year     = val('year');
	var duration = val('duration');
	var persMax  = val('persMax');
	var adults   = val('adults');
	var childs   = val('childs');
	var name     = val('name');
	var phone    = val('phone');
	var mail     = val('mail');
	
	/* tests */
	// date
	if(empty(day) || empty(month) || empty(year)) returnString += "\nDas Anreisedatum ist nicht komplett oder fehlerhaft angegeben.";
	// duration
	if(empty(duration)) returnString += "\nSie haben keine Reisedauer angegeben.";
	// persons
	if(empty(adults)) returnString += "\nSie haben keine Anzahl an erwachsenen Personen angegeben.";
	if(!empty(persMax) && parseInt(persMax) > 0 && parseInt(persMax) < (parseInt(adults) + parseInt(childs))) returnString += "\nSie haben zu viele Personen angegeben. Die Unterkunft ist wird maximal mit " + persMax + " Personen belegt (Erwachsene + Kinder).";
	// name
	if(empty(name)) returnString += "\nBitte geben Sie Ihren Namen an.";
	// contact
	if(empty(phone) && empty(mail)) returnString += "\nBitte geben Sie entweder Ihre E-Mail-Adresse oder Ihre Telefonnummer an.";
	
	// everything is okay
	if(empty(returnString)) return true;

	// if something is filled wrong
	alert("Es sind folgende Fehler beim Abschicken der Anfrage aufgetreten:\n" + returnString);
	
	return false;
	
}

function balancePersons(type) {

	var otherField    = ((type == 'adults') ? field('childs') : field('adults'));
	var otherFieldVal = otherField.value;
	
	var persMax       = parseInt(val('persMax'));
	var numOptions    = persMax - parseInt(((empty(val(type))) ? 0 : val(type)));
	
	if(type == 'adults' && numOptions == persMax) numOptions--;
	
	while(otherField.length > numOptions) otherField.options[otherField.length -1] = null;
	
	for(var i = otherField.length; i <= numOptions; i++) otherField.options[otherField.length] = new Option(i, i, false, ((otherFieldVal == i) ? true : false));
	
	if(!empty(otherFieldVal)) otherField.selectedIndex = otherFieldVal;

}

// returns handler of field with given id
function field(id) {
	return document.getElementById(id);
}

// returns values of field with given id
function val(id) {
	return document.getElementById(id).value;
}

// checks variable if its empty
function empty (mixed_var) {
    // !No description available for empty. @php.js developers: Please update the function summary text file.
    // 
    // version: 911.1619
    // discuss at: http://phpjs.org/functions/empty    // +   original by: Philippe Baumann
    // +      input by: Onno Marsman
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: LH
    // +   improved by: Onno Marsman    // +   improved by: Francesco
    // +   improved by: Marc Jansen
    // +   input by: Stoyan Kyosev (http://www.svest.org/)
    // *     example 1: empty(null);
    // *     returns 1: true    // *     example 2: empty(undefined);
    // *     returns 2: true
    // *     example 3: empty([]);
    // *     returns 3: true
    // *     example 4: empty({});    // *     returns 4: true
    // *     example 5: empty({'aFunc' : function () { alert('humpty'); } });
    // *     returns 5: false
    
    var key;    
    if (mixed_var === "" ||
        mixed_var === 0 ||
        mixed_var === "0" ||
        mixed_var === null ||        mixed_var === false ||
        typeof mixed_var === 'undefined'
    ){
        return true;
    } 
    if (typeof mixed_var == 'object') {
        for (key in mixed_var) {
            return false;
        }        return true;
    }
 
    return false;
}
