// JavaScript Document
var dtCh= "-";
var minYear=1900;
var maxYear=2100;

var errorCaption = '';
var errorCaptionColor = '#ec1f27';
var errorInputBackground = '#ec1f27';
var errorInputColor = '#333333';

var normalInputBackground = '';
var normalBorderColor = '#999999';
var normalInputColor = '#0f3463';

// from John Resig's book on JS
var getStyle = function (elem, name) {
	if (elem.style[name]) {
		return elem.style[name];
	}	else if (elem.currentStyle) {
		return elem.currentStyle[name];
	}	else if (document.defaultView && document.defaultView.getComputedStyle) {
		name = name.replace(/([A-Z])/g, "-$1");
		name = name.toLowerCase();
		var s = document.defaultView.getComputedStyle(elem, "");
		return s && s.getPropertyValue(name);
	} else {
	return null;
	}
}

var isHidden = function (dOb) {
	while (dOb && dOb !== document && dOb.tagName !== undefined) {
	if (getStyle(dOb, 'display') === 'none') {
		return true;
	}
	dOb = dOb.parentNode;
	}
	return false;
}

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!='' && form.elements[i].title!='' && (!isHidden(form.elements[i]) || form.elements[i].id == 'conditions' || 
			(form.elements[i].id == 'domiciliationBankAccount' && document.getElementById('domiciliering') && document.getElementById('domiciliering').checked)
			))	{
			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];
		if(objLabel.getAttribute('id')){
			var domLabel = document.getElementById(objLabel.getAttribute('id'));
			var domLabelText = document.getElementById(objLabel.getAttribute('id')).innerHTML;
			var id_1 = domLabel.id.replace('lbl','')
			msg = msg + chckFieldRadio(id_1);
		}
	}
	if(msg!='') {
		return false;
	}	else {
		if(post) {
			form.submit()
		}else{
			return true;
		}
	}
}

function chckFieldRadio(title) { // Voor checkboxes & radio buttons.
	var spanObj = document.getElementById(title+'_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;
		}
	}
	for (var c=0; c<allInputTags.length; c++) {
		errorLayout(allInputTags[c],radio_checked1,form_required);
	}
	if (!radio_checked1) { 
		return title;
	} else {
		return '';
	}
}

//place your checks here please
function chckField(obj,title) {
	var err = ''	
	obj.value = obj.value.trim();
	if (obj.id.indexOf('email')>-1 && obj.value!=''){
		if (!isEmail(obj.value)){
			err = 1
 			errorLayout(obj,false,form_incorrectemail);
		}else{
			errorLayout(obj,true,'');
		}
		if(obj.id.indexOf('_check')>-1){
			if(document.getElementById(document.getElementById(obj.id + '_for').value).value != obj.value){
				err = 1
 				errorLayout(obj,false,form_emaildontmatch);
			}else{
				errorLayout(obj,true,'');
			}
		}
	}else{
		if (obj.id.indexOf('_tel')>-1 && obj.value!=''){
			if (obj.value.length<10){
				err = 1
				errorLayout(obj,false,'Een telefoonnummer dient 10 tekens lang te zijn');
			}else{
				errorLayout(obj,true,'');
			}
		}else{
			if (obj.id.indexOf('_DD')>-1){
				if (!isDate(obj.value)){
					err = 1
					errorLayout(obj,false,obj.title+' incorrect');
				}else{
					errorLayout(obj,true,'');
				}
			}else{
				if (obj.id.indexOf('_bank')>-1){
					if((!doElfCheck(obj) || obj.value=='') && document.getElementById('payment_method4').checked){
						err = 1
						errorLayout(obj,false, obj.title + ' incorrect');
					}else{
						errorLayout(obj,true,'');
					}
				}else{
					if (obj.id == 'domiciliationBankAccount'){
						if(!doBelgiumBankCheck(obj) || obj.value==''){
							err = 1
							errorLayout(document.getElementById('domiciliationBankAccount1'),false, obj.title + ' incorrect');
							errorLayout(document.getElementById('domiciliationBankAccount2'),false, '');
							errorLayout(document.getElementById('domiciliationBankAccount3'),false, '');
						}else{
							errorLayout(document.getElementById('domiciliationBankAccount1'),true,'');
							errorLayout(document.getElementById('domiciliationBankAccount2'),true,'');
							errorLayout(document.getElementById('domiciliationBankAccount3'),true,'');
						}
					}else{
						if(obj.type=='checkbox'){
							 if(!obj.checked){                    
									err = 1
									errorLayout(obj,false,obj.title);
								}else{
									errorLayout(obj,true,'');			
								}
						}else{
							if((obj.value=='' || obj.value==title) && obj.title!=''){
								err = 1
								errorLayout(obj,false,form_required);
							}else {
								errorLayout(obj,true,'');
							}
						}
					}
				}
			}
		}
	}
	return err
}


function errorLayout(obj,ok,error){ //set colors submit_onclick form if error		
	if(ok){
		obj.style.backgroundColor = normalInputBackground;
		obj.style.color = normalInputColor;
		if(document.getElementById('marker_'+obj.id)) {
			document.getElementById('marker_'+obj.id).innerHTML=''
		}
	}else{
		obj.style.backgroundColor = errorInputBackground;
		obj.style.color = errorInputColor;
		if(document.getElementById('marker_'+obj.id)) {
			document.getElementById('marker_'+obj.id).innerHTML = error + '&nbsp;'
			document.getElementById('marker_'+obj.id).style.fontWeight = 'bold';
			document.getElementById('marker_'+obj.id).style.color = errorCaptionColor;	
		}
	}
}


function isEmail(string) {
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(string)) 
		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 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) {
		if(strDay.indexOf('0')==0){strDay = strDay.substr(1,1);}
		if(strMonth.indexOf('0')==0){strMonth = strMonth.substr(1,1);}
		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)  ){
				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;
}

function doElfCheck(bankNummer) {
  var totaal = 0
  var bankgiro = bankNummer.value
  var oneToTen = new Array()
  if (bankgiro.length == 9) {
	  oneToTen[0]=10*bankgiro.substring(0,0)
	  oneToTen[1]=9*bankgiro.substring(0,1)
	  oneToTen[2]=8*bankgiro.substring(1,2)
	  oneToTen[3]=7*bankgiro.substring(2,3)
	  oneToTen[4]=6*bankgiro.substring(3,4)
	  oneToTen[5]=5*bankgiro.substring(4,5)
	  oneToTen[6]=4*bankgiro.substring(5,6)
	  oneToTen[7]=3*bankgiro.substring(6,7)
	  oneToTen[8]=2*bankgiro.substring(7,8)
	  oneToTen[9]=1*bankgiro.substring(8,9)
	  for (i=0;i<10;i++){
	    totaal=totaal+oneToTen[i]
	  }
	  totaal=totaal/11
	  if (totaal!=Math.round(totaal)){
	  	return false
	  } else {
			return true
	  }
  }else if (bankgiro.length == 10) {
	  oneToTen[0]=10*bankgiro.substring(0,1)
	  oneToTen[1]=9*bankgiro.substring(1,2)
	  oneToTen[2]=8*bankgiro.substring(2,3)
	  oneToTen[3]=7*bankgiro.substring(3,4)
	  oneToTen[4]=6*bankgiro.substring(4,5)
	  oneToTen[5]=5*bankgiro.substring(5,6)
	  oneToTen[6]=4*bankgiro.substring(6,7)
	  oneToTen[7]=3*bankgiro.substring(7,8)
	  oneToTen[8]=2*bankgiro.substring(8,9)
	  oneToTen[9]=1*bankgiro.substring(9,10)
	  for (i=0;i<10;i++){
	    totaal=totaal+oneToTen[i]
	  }
	  totaal=totaal/11
	  if (totaal!=Math.round(totaal)){
	  	return false
	  } else {
			return true
		}
  }else if (bankgiro.length == 6 || bankgiro.length == 7 || bankgiro.length == 8) { //postbank
		return true
	}
	return false
}

function doBelgiumBankCheck(obj){
	if (obj.value.length != 12){
		return false;
	}
	//eerste 10 getallen 
	var firstnumbers = obj.value.substring(0,10);
	//laatste 2 getallen
	var lasttnumbers = obj.value.substring(10,12);
	firstnumbers = parseFloat(firstnumbers)
	lasttnumbers = parseFloat(lasttnumbers)
	var checkdig = parseFloat(firstnumbers % 97)
	if (checkdig == 0) checkdig = 97;
	if (checkdig != lasttnumbers){
		return false;
	}
	return true;
}
