$(document).ready(function() {
	
	$("#questionFormSubmit").click(function(){
		validateQuestionForm();
		return false;
	});

	$("#signupFormSubmit").click(function(){
		validateSignupForm();
		return false;
	});
	
    /* BEGIN TROS_MOD */
    backupOrigFields();
    if(isValidProgramSelectIndex($('select#ft-8').val())) {
       setDynamicFields($('select#ft-8').val());
    } 
    $('select#ft-8').change( function() {setDynamicFields($('select#ft-8').val()); });
});

/*
Object contains all dynamic program select fields
with the required field type

@var object programSelectFields
*/
var programSelectFields = {
	fields  : new Object(),
	backup  : '',
	select_index : ''
};
//extra "battle" (1) fields
programSelectFields.fields['1'] = new Object();
programSelectFields.fields['1'][0] = new Object();
programSelectFields.fields['1'][0]['type']      = 'string';
programSelectFields.fields['1'][0]['label']     = 'Naam school:';
programSelectFields.fields['1'][0]['id']        = 'ft-u1';
programSelectFields.fields['1'][0]['error_id']  = 'error_signupForm_schoolname';
programSelectFields.fields['1'][0]['error_type'] = 'error';
programSelectFields.fields['1'][0]['name']      = 'schoolname';
programSelectFields.fields['1'][0]['value']     = '<div class="input" id="' + programSelectFields.fields['1'][0]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen schoolnaam ingevuld.</span></div>';
programSelectFields.fields['1'][1] = new Object();
programSelectFields.fields['1'][1]['type']      = 'string';
programSelectFields.fields['1'][1]['label']     = 'Contact persoon:';
programSelectFields.fields['1'][1]['id']        = 'ft-u2';
programSelectFields.fields['1'][1]['error_id']  = 'error_signupForm_contact';
programSelectFields.fields['1'][1]['error_type'] = 'error';
programSelectFields.fields['1'][1]['name']      = 'contact';
programSelectFields.fields['1'][1]['value']     = '<div class="input" id="' + programSelectFields.fields['1'][1]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen contact persoon ingevuld.</span></div>';
programSelectFields.fields['1'][2] = new Object();
programSelectFields.fields['1'][2]['type']      = 'number';
programSelectFields.fields['1'][2]['label']     = 'Hoeveel groepen 7 en 8 zijn er?';
programSelectFields.fields['1'][2]['id']        = 'ft-u3';
programSelectFields.fields['1'][2]['error_id']  = 'error_signupForm_groups';
programSelectFields.fields['1'][2]['error_type'] = 'error';
programSelectFields.fields['1'][2]['name']      = 'groups';
programSelectFields.fields['1'][2]['value']     = '<div class="input" id="' + programSelectFields.fields['1'][2]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen groepen ingevuld.</span></div>';
programSelectFields.fields['1'][3] = new Object();
programSelectFields.fields['1'][3]['type']      = 'string';
programSelectFields.fields['1'][3]['label']     = 'In welke groep zit je?';
programSelectFields.fields['1'][3]['id']        = 'ft-u4';
programSelectFields.fields['1'][3]['error_id']  = 'error_signupForm_group';
programSelectFields.fields['1'][3]['error_type'] = 'error';
programSelectFields.fields['1'][3]['name']      = 'group';
programSelectFields.fields['1'][3]['value']     = '<div class="input" id="' + programSelectFields.fields['1'][3]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen groep ingevuld.</span></div>';

//reportage
programSelectFields.fields['2'] = new Object();
programSelectFields.fields['2'][0] = new Object();
programSelectFields.fields['2'][0]['type']      = 'string';
programSelectFields.fields['2'][0]['label']     = 'Naam evenement:';
programSelectFields.fields['2'][0]['id']        = 'ft-u2-0';
programSelectFields.fields['2'][0]['error_id']  = 'error_signupForm_evenement';
programSelectFields.fields['2'][0]['error_type'] = 'error';
programSelectFields.fields['2'][0]['name']      = 'evenement';
programSelectFields.fields['2'][0]['value']     = '<div class="input" id="' + programSelectFields.fields['2'][0]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen evenement ingevuld.</span></div>';

programSelectFields.fields['2'][1] = new Object();
programSelectFields.fields['2'][1]['type']      = 'date';
programSelectFields.fields['2'][1]['label']     = 'Datum evenement:';
programSelectFields.fields['2'][1]['id']        = 'ft-u2-1';
programSelectFields.fields['2'][1]['error_id']  = 'error_signupForm_eventdate';
programSelectFields.fields['2'][1]['error_type'] = 'error';
programSelectFields.fields['2'][1]['name']      = 'eventdate';
programSelectFields.fields['2'][1]['value']     = '<div class="input" id="' + programSelectFields.fields['2'][1]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen evenement datum ingevuld.</span></div>';

programSelectFields.fields['2'][2] = new Object();
programSelectFields.fields['2'][2]['type']      = 'string';
programSelectFields.fields['2'][2]['label']     = 'Om welke sport gaat het?';
programSelectFields.fields['2'][2]['id']        = 'ft-u2-2';
programSelectFields.fields['2'][2]['error_id']  = 'error_signupForm_sport';
programSelectFields.fields['2'][2]['error_type'] = 'error';
programSelectFields.fields['2'][2]['name']      = 'sport';
programSelectFields.fields['2'][2]['value']     = '<div class="input" id="' + programSelectFields.fields['2'][2]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen sport ingevuld.</span></div>';

programSelectFields.fields['2'][3] = new Object();
programSelectFields.fields['2'][3]['type']      = 'string';
programSelectFields.fields['2'][3]['label']     = 'Ik wil dat Ron bij mij komt kijken omdat:';
programSelectFields.fields['2'][3]['id']        = 'ft-u2-3';
programSelectFields.fields['2'][3]['error_id']  = 'error_signupForm_ronkijkenomdat';
programSelectFields.fields['2'][3]['error_type'] = 'error';
programSelectFields.fields['2'][3]['name']      = 'ronkijkenomdat';
programSelectFields.fields['2'][3]['value']     = '<div class="input" id="' + programSelectFields.fields['2'][3]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen geldige reden ingevuld.</span></div>';

//extra "the move" (3) fields
programSelectFields.fields['3'] = new Object();
programSelectFields.fields['3'][0] = new Object();
programSelectFields.fields['3'][0]['type']      = 'string';
programSelectFields.fields['3'][0]['label']     = 'Naam van je \'move\':';
programSelectFields.fields['3'][0]['id']        = 'ft-u3-1';
programSelectFields.fields['3'][0]['error_id']  = 'error_signupForm_themove';
programSelectFields.fields['3'][0]['error_type'] = 'error';
programSelectFields.fields['3'][0]['name']      = 'themove';
programSelectFields.fields['3'][0]['value']     = '<div class="input" id="' + programSelectFields.fields['3'][0]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen move ingevuld.</span></div>';

programSelectFields.fields['3'][1] = new Object();
programSelectFields.fields['3'][1]['type']      = 'string';
programSelectFields.fields['3'][1]['label']     = 'Beschrijf je \'move\' in stappen:';
programSelectFields.fields['3'][1]['id']        = 'ft-u3-2';
programSelectFields.fields['3'][1]['error_id']  = 'error_signupForm_themovesteps';
programSelectFields.fields['3'][1]['error_type'] = 'error-2';
programSelectFields.fields['3'][1]['name']      = 'themovesteps';
programSelectFields.fields['3'][1]['value']     = '<div class="textarea" id="' + programSelectFields.fields['3'][1]['error_id'] + '"><textarea id="{id}" name="program_dynamic[{name}]" class="area" rows="4" cols="12"></textarea><span class="notice">Geen move stappen ingevuld.</span></div>';

/*
#4 == Hellup!
*/
programSelectFields.fields['4'] = new Object();
programSelectFields.fields['4'][0] = new Object();
programSelectFields.fields['4'][0]['type']      = 'string';
programSelectFields.fields['4'][0]['label']     = 'Om welke sport gaat het?';
programSelectFields.fields['4'][0]['id']        = 'ft-u4-1';
programSelectFields.fields['4'][0]['error_id']  = 'error_signupForm_welkesport';
programSelectFields.fields['4'][0]['error_type'] = 'error';
programSelectFields.fields['4'][0]['name']      = 'welkesport';
programSelectFields.fields['4'][0]['value']     = '<div class="input" id="' + programSelectFields.fields['4'][0]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen sport ingevuld.</span></div>';
programSelectFields.fields['4'][1] = new Object();
programSelectFields.fields['4'][1]['type']      = 'string';
programSelectFields.fields['4'][1]['label']     = 'Wat is je probleem?';
programSelectFields.fields['4'][1]['id']        = 'ft-u4-2';
programSelectFields.fields['4'][1]['error_id']  = 'error_signupForm_helpprobleem';
programSelectFields.fields['4'][1]['error_type'] = 'error-2';
programSelectFields.fields['4'][1]['name']      = 'helpprobleem';
programSelectFields.fields['4'][1]['value']     = '<div class="textarea" id="' + programSelectFields.fields['4'][1]['error_id'] + '"><textarea id="{id}" name="program_dynamic[{name}]" class="area" rows="4" cols="12"></textarea><span class="notice">Geen probleem ingevuld.</span></div>';
programSelectFields.fields['4'][2] = new Object();
programSelectFields.fields['4'][2]['type']      = 'string';
programSelectFields.fields['4'][2]['label']     = 'Ik wil hulp van:';
programSelectFields.fields['4'][2]['id']        = 'ft-u4-4';
programSelectFields.fields['4'][2]['error_id']  = 'error_signupForm_helpvan';
programSelectFields.fields['4'][2]['error_type'] = 'error';
programSelectFields.fields['4'][2]['name']      = 'helpvan';
programSelectFields.fields['4'][2]['value']     = '<div class="input" id="' + programSelectFields.fields['4'][2]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen persoon ingevuld.</span></div>';

/*
 #5 == Portret
*/
programSelectFields.fields['5'] = new Object();
programSelectFields.fields['5'][0] = new Object();
programSelectFields.fields['5'][0]['type']      = 'string';
programSelectFields.fields['5'][0]['label']     = 'Aan welke sport doe je?';
programSelectFields.fields['5'][0]['id']        = 'ft-u5-1';
programSelectFields.fields['5'][0]['error_id']  = 'error_signupForm_portretsport';
programSelectFields.fields['5'][0]['error_type'] = 'error';
programSelectFields.fields['5'][0]['name']      = 'portretsport';
programSelectFields.fields['5'][0]['value']     = '<div class="input" id="' + programSelectFields.fields['5'][0]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen sport ingevuld.</span></div>';
programSelectFields.fields['5'][1] = new Object();
programSelectFields.fields['5'][1]['type']      = 'string';
programSelectFields.fields['5'][1]['label']     = 'Wie is je idool?';
programSelectFields.fields['5'][1]['id']        = 'ft-u5-2';
programSelectFields.fields['5'][1]['error_id']  = 'error_signupForm_portretidool';
programSelectFields.fields['5'][1]['error_type'] = 'error';
programSelectFields.fields['5'][1]['name']      = 'portretidool';
programSelectFields.fields['5'][1]['value']     = '<div class="input" id="' + programSelectFields.fields['5'][1]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen idool ingevuld.</span></div>';

/*
#8 == Ron Regelt 't
*/
programSelectFields.fields['8'] = new Object();
programSelectFields.fields['8'][0] = new Object();
programSelectFields.fields['8'][0]['type']      = 'string';
programSelectFields.fields['8'][0]['label']     = 'Wat is je wens?';
programSelectFields.fields['8'][0]['id']        = 'ft-u8-1';
programSelectFields.fields['8'][0]['error_id']  = 'error_signupForm_ronwens';
programSelectFields.fields['8'][0]['error_type'] = 'error';
programSelectFields.fields['8'][0]['name']      = 'ronwens';
programSelectFields.fields['8'][0]['value']     = '<div class="input" id="' + programSelectFields.fields['8'][0]['error_id'] + '"><input id="{id}" class="text" type="text" name="program_dynamic[{name}]" value="" /><span class="notice">Geen wens ingevuld.</span></div>';
programSelectFields.fields['8'][1] = new Object();
programSelectFields.fields['8'][1]['type']      = 'string';
programSelectFields.fields['8'][1]['label']     = 'Waarom is dat je wens?';
programSelectFields.fields['8'][1]['id']        = 'ft-u8-2';
programSelectFields.fields['8'][1]['error_id']  = 'error_signupForm_ronwaarom';
programSelectFields.fields['8'][1]['error_type'] = 'error-2';
programSelectFields.fields['8'][1]['name']      = 'ronwaarom';
programSelectFields.fields['8'][1]['value']     = '<div class="textarea" id="' + programSelectFields.fields['8'][1]['error_id'] + '"><textarea id="{id}" name="program_dynamic[{name}]" class="area" rows="4" cols="12"></textarea><span class="notice">Geen wens ingevuld.</span></div>';

/*
Trigger functions to set dynamic fields

@param int val
*/
function setDynamicFields(val) {
	if(isValidProgramSelectIndex(val)) {
		programSelectFields.select_index = parseInt(val);
		var dynamic_field_content   = false;
		var programFields           = getProgramSelectFields(programSelectFields.select_index);
		if(programFields != false) {
			replaceFormFields(programFields);
			return;
		}
		restoreBackupFields();
	}
}

/*
Backup the orig dynamic field
*/
function backupOrigFields() {
	programSelectFields.backup = $('div#dynamic-form-elements').html();
}

/*
Restore backup fields
*/
function restoreBackupFields() {
if(typeof(programSelectFields.backup) == 'string' && programSelectFields.backup != '') {
    $('div#dynamic-form-elements').html(programSelectFields.backup);
}
}

/*
Replace the dynamic form part
with the new content

@param  string  new_fields
*/
function replaceFormFields(new_fields) {
	if(new_fields != '') {
		$('div#dynamic-form-elements').html(new_fields);
	}
}

/*
Check if select index is a valid number

@param int  select_val
*/
function isValidProgramSelectIndex(select_val) {
	if(parseInt(select_val) > 0) {
		return true;
	}
	return false;
}

/*
Get dynamic fields for given program
select index.

@param  int     select_index
@return mixed   select_fields
*/
function getProgramSelectFields(select_index) {
	var select_fields = false;
	if(typeof(programSelectFields.fields[select_index]) == 'object') {
		var _fieldsObj = programSelectFields.fields[select_index];
		for(var obj in _fieldsObj) {
			if(typeof(_fieldsObj[obj]['value']) == 'string' && _fieldsObj[obj]['value'] != '') {
	            if(select_fields == false) {
	                select_fields = '';
	            }
	            select_fields += wrapProgramFields(_fieldsObj[obj]['value'], select_index, parseInt(obj));
	        }
	    }
	    _objFields       = null;
	    _fieldsObjLength = null;
	}
	return select_fields;
}

/*
Wraps fields into template content wrapping

@param  string  program_fields
@param  int     program_index

@return mixed   wrapping
*/
function wrapProgramFields(program_fields, program_index, num) {
	if(program_fields != '') {
		var wrapping = '<div class="row"><label class="label-1" for="{id}">{label}</label>' + program_fields + '</div>';
		wrapping = wrapping.replace(/\{label\}/g, programSelectFields.fields[program_index][num]['label']);
		wrapping = wrapping.replace(/\{id\}/g, programSelectFields.fields[program_index][num]['id']);
	    wrapping = wrapping.replace(/\{error_id\}/g, programSelectFields.fields[program_index][num]['error_id']);
	    wrapping = wrapping.replace(/\{num\}/g, num);
	    wrapping = wrapping.replace(/\{index\}/g, program_index);
	    wrapping = wrapping.replace(/\{name\}/g, programSelectFields.fields[program_index][num]['name']);
	    return wrapping;
	}
	return program_fields;
}

/* END TROS_MOD */



function validateQuestionForm() {
	
	var questionForm = document.forms.questionForm;
	var name = trim(questionForm.name.value);
	var email = trim(questionForm.email.value);
	var question = trim(questionForm.question.value);
	var error = false;

	if (name == "") {
		$("#error_questionForm_name").addClass("error");
		error = true;
	} else {
		$("#error_questionForm_name").removeClass("error");
	} 

	if (!isValidEmail(email)) {
		$("#error_questionForm_email").addClass("error");
		error = true;
	} else {
		$("#error_questionForm_email").removeClass("error");
	} 

	if (question == "") {
		$("#error_questionForm_question").addClass("error-2");
		error = true;
	} else {
		$("#error_questionForm_question").removeClass("error-2");
	} 

	if (error == false) {
		questionForm.submit();
	}
}


function validateSignupForm() {
	
	var signupForm = document.forms.signupForm;
	var name = trim(signupForm.name.value);
	var birthdate = trim(signupForm.birthdate.value);
	var email = trim(signupForm.email.value);
	var street = trim(signupForm.street.value);
	var city = trim(signupForm.city.value);
	var program = signupForm.program.value;
// TROS_MOD var motivation = trim(signupForm.motivation.value);	
	var error = false;

	if (name == "") {
		$("#error_signupForm_name").addClass("error");
		error = true;
	} else {
		$("#error_signupForm_name").removeClass("error");
	} 

	if (!isValidDutchBirthDate(birthdate)) {
		$("#error_signupForm_birthdate").addClass("error");
		error = true;
	} else {
		$("#error_signupForm_birthdate").removeClass("error");
	} 

	if (!isValidEmail(email)) {
		$("#error_signupForm_email").addClass("error");
		error = true;
	} else {
		$("#error_signupForm_email").removeClass("error");
	} 

	if (street == "") {
		$("#error_signupForm_street").addClass("error");
		error = true;
	} else {
		$("#error_signupForm_street").removeClass("error");
	} 

	if (city == "") {
		$("#error_signupForm_city").addClass("error");
		error = true;
	} else {
		$("#error_signupForm_city").removeClass("error");
	} 

	if (program < 1) {
		$("#error_signupForm_program").addClass("error");
		error = true;
	} else {
		$("#error_signupForm_program").removeClass("error");
	} 

    /* BEGIN TROS_MOD
    if (motivation == "") {
            $("#error_signupForm_motivation").addClass("error-2");
            error = true;
    } else {
            $("#error_signupForm_motivation").removeClass("error-2");
    }
    */

    if(typeof(signupForm.motivation) != 'undefined') {
        var motivation = signupForm.motivation.value;
        if (motivation == "") {
            $("#error_signupForm_motivation").addClass("error-2");
            error = true;
        } else {
            $("#error_signupForm_motivation").removeClass("error-2");
        }
    }

    if(typeof(programSelectFields.select_index) == 'number' && programSelectFields.select_index > 0 && typeof(programSelectFields.fields) == 'object') {
        for(var fNum in programSelectFields.fields[programSelectFields.select_index]) {
            var _elID = programSelectFields.fields[programSelectFields.select_index][fNum]['id'];
            var _erID = programSelectFields.fields[programSelectFields.select_index][fNum]['error_id'];
            var _dynamic_error = false;
            switch(programSelectFields.fields[programSelectFields.select_index][fNum]['type']) {
                default:
                if($('#' + _elID).val() == "") {
                    _dynamic_error = true;
                }
                break;

                case 'date':
                   if (!isValidDutchBirthDate($('#' + _elID).val())) {
                       _dynamic_error = true;
                   }
                break;

                case 'number':
                   if(!isValidNumber($('#' + _elID).val())) {
                       _dynamic_error = true;
                   }
                break;
            }
            if(_dynamic_error == true) {
            	$("#" + _erID).addClass(programSelectFields.fields[programSelectFields.select_index][fNum]['error_type']);
            	error = true;
            } else {
            	$("#" + _erID).removeClass(programSelectFields.fields[programSelectFields.select_index][fNum]['error_type']);
            }
        }
    }

	if (error == false) {
		signupForm.submit();
	}
}

function isValidNumber(num) {
	var regObj = /^[0-9]+$/;
	if(regObj.test(num)) {
		return true;
	}
	return false;
}
/* END TROS_MOD */
