// JavaScript Document
var dtCh= "-";
var minYear=1900;
var maxYear=2100;

function submit_onclick(obj,post){
	var msg='';
	var form=document.getElementById(obj);
	var el = form.getElementsByTagName('label');
	for(i=0;i<form.elements.length;i++){
		if(form.elements[i].id!=''){
			if(form.elements[i].accessKey!=undefined && form.elements[i].accessKey!=''){ //if form element contains owner attribute
				if(document.getElementById(form.elements[i].accessKey).style.display!='none'){ //then only check if shown
					msg = msg + chckField(form.elements[i],form.elements[i].title)
				}
			}else{
				msg = msg + chckField(form.elements[i],form.elements[i].title)
			}
		}
	}
	for (var e=0; e<el.length; e++) { //check for radio/checkboxes
		var objLabel = el[e];
		var domLabel = document.getElementById(objLabel.getAttribute('id'));
		var domLabelText = document.getElementById(objLabel.getAttribute('id')).innerHTML;
		var id_1 = domLabel.id.replace('lbl','')

		var spanObj = document.getElementById(id_1+'_group');
		var radio_checked1 = false;
		var radio_result = '';

		var allInputTags = spanObj.getElementsByTagName('INPUT');
		for (var c=0; c<allInputTags.length; c++) {
			if (allInputTags[c].checked) {
				radio_checked1 = true;
				radio_result = allInputTags[c].value;
				break;
			}
		}
		if(!radio_checked1) {
			msg=msg + '- '+allInputTags[0].title +'\n';
		}	
	}

	if(msg!='') {
		if(document.getElementById('error_intro')) {
			alert(document.getElementById('error_intro').value + ":\n" + msg);
		} else {
			alert("De volgende velden zijn verplicht:\n" + msg);
		}
		return false;
	}	else {
		if(post) form.submit()
	}
}

//place your checks here please
function chckField(obj,title) {
    var err = ''
    if (obj.type == "radio") {
        return err;
    }

    var marker = document.getElementById("marker_" + obj.id);
    if (marker != undefined) {
        //marker.style.display = '';
        //marker.textContent = "test";
    }

	if (obj.id.indexOf('_email')>-1 && obj.value!=''){
		if (!isEmail(obj.value)){
			err = err + "- Het emailadres is niet correct\n"
			errorLayout(obj,false);
		}else{
			errorLayout(obj,true);
		}
	}
	if (obj.id.indexOf('_tel')>-1 && obj.value!=''){
		if (obj.value.length<10){
			err = err + "- Een telefoonnummer dient 10 tekens lang te zijn\n"
			errorLayout(obj,false);
		}else{
			errorLayout(obj,true);
		}
	}
	if (obj.id.indexOf('_DD')>-1  && obj.value!=''){
		if (!isDate(obj.value+'-'+document.getElementById(obj.id.replace('DD','MM')).value+'-'+document.getElementById(obj.id.replace('DD','YY')).value)){
			err = err + "- "+obj.title+" incorrect\n"  
			errorLayout(obj,false);
			errorLayout(document.getElementById(obj.id.replace('DD','MM')),false);
			errorLayout(document.getElementById(obj.id.replace('DD','YY')),false);
		}else{
			errorLayout(obj,true);
			errorLayout(document.getElementById(obj.id.replace('DD','MM')),true);
			errorLayout(document.getElementById(obj.id.replace('DD','YY')),true);
		}
	}else{
		if((obj.value=='' || obj.value==title) && obj.title!=''){
			err = "- " + title + "\n";
			errorLayout(obj,false);
			}
		else {
			errorLayout(obj,true);
		}
	}
	return err
}

function errorLayout(obj,ok){ //set colors submit_onclick form if error
	if(ok){
		obj.style.backgroundColor = "";
		obj.style.color = "";
	}else{
	    obj.style.backgroundColor = "#f5cccc";
		obj.style.color = "";
	}
}

function updateDateField(id) {
    var day = document.getElementById(id + '_DD').value;
    var month = document.getElementById(id + '_MM').value;
    var year = document.getElementById(id + '_YY').value;
    document.getElementById(id).value = day + '-' + month + '-' + year;
}

function updateTimeField(id) {
    var hours = document.getElementById(id + '_HH').value;
    var minutes = document.getElementById(id + '_MM').value;
    if (Number(minutes) < 10 && minutes.Length == 1) {
        minutes = "0" + minutes;    // Voeg een "0" voor het nummer toe, ie. voor 9 wordt dit dan "09"
    }
    document.getElementById(id).value = hours + ':' + minutes;
}

function isEmail(string) {
	if (string.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
		return true;
	else
		return false;
}

function isNumberKey(e) {
	var k;
	document.all ? k = e.keyCode : k = e.which;
	return ( (k > 47 && k < 58) || k == 46 || k==8 || k==9 || k==0  );
}

function isEnterKey(e) {
	var k;
	document.all ? k = e.keyCode : k = e.which;
	if(k == 13){
		getLocs()
	}
}


function isTelefoon(obj,e) {
	var k;
	document.all ? k = e.keyCode : k = e.which;
	if(obj.value.length<10){
		return ((k > 47 && k < 58 || k == 46 || k == 8 || k==9 || k==0 || (k > 95 && k < 106) ));
	}else{
		alert('Een telefoonnummer kan max. 10 cijfers lang te zijn.')
	}
}

function isHour(obj)
{
	if(obj.value>23 || obj.value <0)
	{
		obj.value="00"
		alert("Geen bestaand tijdstip")
	}
}
function isMinute(obj)
{
	if(obj.value>59 || obj.value <0)
	{
		obj.value="00"
		alert("Geen bestaand tijdstip")
	}
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var arrDate = dtStr.split(dtCh)
	strDay=arrDate[0]	
	strMonth=arrDate[1]
	strYear=arrDate[2]
	if(isNaN(strDay) || isNaN(strMonth) || isNaN(strYear)) return false
	if(strDay.length>0 && strMonth.length>0 && strYear.length>0) {
		month=parseInt(strMonth)		
		day=parseFloat(strDay)				
		year=parseInt(strYear)
		if (day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || (day > daysInMonth[month] || daysInMonth[month]==undefined ) || (strYear.length<4)  ){
				//alert(day)
				return false
		}
		return true
	}else{
		return false
	}
}

function FV_IsDateIsBirthDate(val) {

	var now = new Date();
	var thisYear = now.getFullYear() - 18  //minimum 18 years old
	now.setFullYear(thisYear)
	now = now.getTime(); //NN3

	var valueDate = val.split('-');
	
	var dateToCheck = new Date();
	if (valueDate[2] < 1900) {
		return false;
	}
	dateToCheck.setYear(valueDate[2]);
	dateToCheck.setMonth(valueDate[1]-1);
	dateToCheck.setDate(valueDate[0]);
	var checkDate = dateToCheck.getTime();

	var pastDate = (now > checkDate);

	return pastDate;
}

function FV_IsDateInPast(val) {

	var now = new Date();
	now = now.getTime(); //NN3
	
	var valueDate = val.split('-');
	
	var dateToCheck = new Date();
	dateToCheck.setYear(valueDate[2]);
	dateToCheck.setMonth(valueDate[1]-1);
	dateToCheck.setDate(valueDate[0]-1);
	var checkDate = dateToCheck.getTime();

	var pastDate = (now > checkDate);

	return pastDate;
}

// 2011-05-09 PR - functies toegevoegd voor forms.
function AddFormTextGroup(formTextId) {
    // Haal de div op van de FormText.
    var form = document.getElementById("formText" + formTextId);
    if (form == undefined)
        return false;

    // hidden size field (aantal groups onder de formText div).
    var formTextSize = document.getElementById("formText" + formTextId + "_size");
    if (formTextSize == undefined)
        return false;

    // aantal groups onder de formText div.
    var formTextSizeNum = Number(formTextSize.value);

    // We gaan nieuwe toevoegen, dus update group size waarde (hidden field).
    formTextSize.value = formTextSizeNum + 1;

    // Laat 'verwijder' entry button zien voor de formText.
    ShowDelFormTextButton(formTextId, true);

    // Maak een copie van de laatste groep onder de formText.
    var lastGroupName = "formText" + formTextId + "_group" + Number(formTextSizeNum - 1);
    var lastGroup = document.getElementById(lastGroupName);
    var newGroup = lastGroup.cloneNode(true);

    // Replace id en name met nieuwe id en name voor elke item onder de groep.
    ReplaceChildrenIdName(newGroup, formTextSizeNum);

    // Voeg het onder een nieuwe group div toe.
    var newGroupHTML = "<div id=formText" + formTextId + "_group" + formTextSizeNum + ">";
    if (formTextSizeNum == 1) {
        newGroupHTML += "<div style='background-color:#DA477A; height:1px; width:298px;' />";
    }
    newGroupHTML += newGroup.innerHTML + "</div>";

    // Voeg nieuwe groep toe.
    //form.innerHTML += newGroupHTML; // innerHTML heeft geen ingevulde waardes, en zal bestaande ingevullende waardes wissen.
    //form.appendChild(document.createElement(newGroupHTML)); // werkt niet.
    $(form).append(newGroupHTML); // alleen jQuery schijnt te doen wat je verwacht.
    return true
}

// Vervang item id en name van alle children en sub-children onder root - recursive.
function ReplaceChildrenIdName(root, formTextSizeNum) {
    // Als de root geen children heeft - return.
    if (root.children == null)
        return false;

    // Alle childs item onder root
    for (var i = 0; i < root.children.length; i++) {
        var node = root.children[i];
        // Als de child ook weer children heeft, ga deze ook af.
        if (node.children != null)
            ReplaceChildrenIdName(node, formTextSizeNum);

        // Pak het id van de child, kijk of deze de item id van de vorige group heeft,
        // en vervang deze met nieuwe item id van de huidige group.
        var id = node.id;
        var name = node.name;
        var oldGroupItem = "_item" + Number(formTextSizeNum - 1);
        var newGroupItem = "_item" + Number(formTextSizeNum);

        // Als id not undefined is, en id eindigt op '_item' + formTextSizeNum - 1 (van vorige group)
        if ((id != undefined) && (id !== "")) {
            var idSubLength = (id.length - oldGroupItem.length);
            var idIndexOf = id.indexOf(oldGroupItem, idSubLength);

            // Vervang oude group gedeelte met nieuwe.
            if (idIndexOf == idSubLength)
                node.id = node.id.substr(0, idSubLength) + newGroupItem;
        }

        // Als name not undefined is, en name eindigt op '_item' + formTextSizeNum - 1 (van vorige group)
        if ((name != undefined) && (name !== "")) {
            var nameSubLength = (name.length - oldGroupItem.length);
            var nameIndexOf = name.indexOf(oldGroupItem, nameSubLength);

            // Vervang oude group gedeelte met nieuwe.
            if (nameIndexOf == nameSubLength)
                node.name = node.name.substr(0, nameSubLength) + newGroupItem;
        }
    }
    return true;
}

// Verwijderd de laatste group onder formText met formTextId.
function DelFormTextLastGroup(formTextId) {
    // Haal de div op van de FormText.
    var form = document.getElementById("formText" + formTextId);
    if (form == undefined)
        return false;

    // hidden size field (aantal groups onder de FormText div).
    var formTextSize = document.getElementById("formText" + formTextId + "_size");
    if (formTextSize == undefined)
        return false;

    // aantal groups onder de div.
    var formTextSizeNum = Number(formTextSize.value);

    // We verwijderen de laatste, dus zet nieuwe waarde.
    formTextSize.value = formTextSizeNum - 1;

    // Hide 'verwijder' button als we nog maar 1 of minder entries hebben.
    if (formTextSizeNum - 1 < 2)
        ShowDelFormTextButton(formTextId, false);

    // Verwijder de laatste child.
    form.removeChild(form.lastChild);
    return true;
}

// Laat de "_del" button wel of niet zien (bShow) van de formText met formTextId.
function ShowDelFormTextButton(formTextId, bShow) {
    var button = document.getElementById("formText" + formTextId + "_del");
    if (button == undefined)
        return false;

    button.style.display = (bShow ? "" : "none");
    return true;
}
