// JavaScript Document
function stripslashes(str) {
str=str.replace(/\\'/g,'\'');
str=str.replace(/\\"/g,'"');
str=str.replace(/\\\\/g,'\\');
str=str.replace(/\\0/g,'\0');
return str;
}

var field = '';
function check_form_uniek(inputElement) {
	var url = inputElement.getAttribute('uniek');
	field = inputElement.getAttribute('uniekUpdateField');
	new Ajax.Updater(UniekCheckUpdateTempField, url, {method: 'post', onComplete: check_form_uniek_continue, parameters: { checkVal: inputElement.value }});
}

function check_form_uniek_continue() {
	if(UniekCheckUpdateTempField.innerHTML!='true') {
		$(field).innerHTML=UniekCheckUpdateTempField.innerHTML;
		return false;
	} else {
		$(field).innerHTML='';
		return true;	
	}
}
	
function checkRadio(arr) {
	for(x=0;x<arr.length;x++) {
		if (document.getElementById(arr[x])&&document.getElementById(arr[x]).checked) {
			return true;
		}
	}
	
	return false;
}

function check_form(dofocus) {

	var inputs = document.getElementsByTagName('input');
	
	// Alle inputs doorlopen
	for(i=0;i<inputs.length;i++){
		// Indien validatie niet leeg is
		if(inputs[i].getAttribute('validatie')!=null) {
			// Checks en meldingen verzamelen
			var checks = inputs[i].getAttribute('validatie').split(';');
			var meldingen = inputs[i].getAttribute('melding').split(';');
			
			// Door checks lopen en meldingen laten zien
			for(j=0;j<checks.length;j++) {
				if(checks[j]=='not_empty'&&inputs[i].value=='') {
					print_error(meldingen[j]);
					if (dofocus) {
						inputs[i].focus();
					}
					return false;	
				}
				
				if(checks[j]=='date'&&!isValidDate(inputs[i].value, 'yyyy/mm/dd')) {
					print_error(meldingen[j]);
					if (dofocus) {
						inputs[i].focus();
					}
					return false;	
				}
				
				if(checks[j]=='numchars'&&!isValidNumchar(inputs[i].value, 'yyyy/mm/dd')) {
					print_error(meldingen[j]);
					if (dofocus) {
						inputs[i].focus();
					}
					return false;	
				}
				
				if(checks[j]=='radio_not_checked'&&inputs[i].checked) {
					print_error(meldingen[j]);
					return false;	
				}
				
				if(checks[j]=='radioNotEmpty') {
					var checkArr = inputs[i].getAttribute('radioChecks').split(';');
					if (!checkRadio(checkArr)) {
						print_error(meldingen[j]);
						if (dofocus) {
							inputs[i].focus();
						}
						return false;	
					}
				}
			
			}			
		}
		
		// Indien er een reg exp check gedaan moet worden
		if(inputs[i].getAttribute('check')!=null) {
			var text = stripslashes(inputs[i].getAttribute('check'));
			var regExp = new RegExp(text);
			if (!regExp.test(inputs[i].value)) {
				print_error(inputs[i].getAttribute('checkMelding'));
					if (dofocus) {
						inputs[i].focus();
					}
				return false;
			}
		}
		
		
		// Indien er een unique check gedaan moet worden
		if(inputs[i].getAttribute('uniek')!=null) {
			if (!check_form_uniek(inputs[i])) {
				print_error(inputs[i].getAttribute('uniekMelding'));
					if (dofocus) {
						inputs[i].focus();
					}
				return false;	
			}
		}
		
	}
	
	var textareas = document.getElementsByTagName('textarea');
	

	for(i=0;i<textareas.length;i++){
		if(textareas[i].getAttribute('validatie')!=null&&textareas[i].getAttribute('validatie')=='not_empty'&&textareas[i].value=='') {
			print_error(textareas[i].getAttribute('melding'));
			textareas[i].focus();
			return false;	
		}
		
		// Indien er een reg exp check gedaan moet worden
		if(textareas[i].getAttribute('check')!=null) {
			var text = stripslashes(textareas[i].getAttribute('check'));
			var regExp = new RegExp(text);
			if (!regExp.test(textareas[i].value)) {
				print_error(textareas[i].getAttribute('checkMelding'));
				textareas[i].focus();
				return false;
			}
		}
	}
	
	var selects = document.getElementsByTagName('select');
	
	for(i=0;i<selects.length;i++){
		if(selects[i].getAttribute('verplicht')!=null&&selects[i].getAttribute('verplicht')=='1'&&selects[i].options[selects[i].selectedIndex].value=='') {
			print_error(selects[i].getAttribute('melding'));
			selects[i].focus();
			return false;	
		}
		
	}
	
	return true;
}

function print_error(error) {
	alert(error);	
}

function isValidDate(date_string, format) {
	
    var days = [31,28,31,30,31,30,31,31,30,31,30,31];
    var year;
    var month;
    var day;
    var date_parts = null;
    var rtrn = true;

    if (/^m{1}[./-]d{1}[./-]y{1}$/.test(format)) {
        //US Date
        date_parts = date_string.match(/^(\d{1,2})[./-](\d{1,2})[./-](\d{2}|\d{4})$/);
        if (date_parts) {
            month = date_parts[1];
            day = date_parts[2];
            year = date_parts[3];
        }
    } else if (/^m{2}[./-]d{2}[./-]y{2}$/.test(format)) {
        //US Short Date
        date_parts = date_string.match(/^(\d{1,2})[./-](\d{1,2})[./-](\d{2})$/);
        if (date_parts) {
            month = date_parts[1];
            day = date_parts[2];
            year = date_parts[3];
        }
    } else if (/^m{2}[./-]d{2}[./-]y{4}$/.test(format)) {
        //US Long Date
        date_parts = date_string.match(/^(\d{1,2})[./-](\d{1,2})[./-](\d{4})$/);
        if (date_parts) {
            month = date_parts[1];
            day = date_parts[2];
            year = date_parts[3];
        }
    } else if (/^y{1}[./-]m{1}[./-]d{1}$/.test(format)) {
        //EU Date
        date_parts = date_string.match(/^(\d{2}|\d{4})[./-](\d{1,2})[./-](\d{1,2})$/);
        if (date_parts) {
            year = date_parts[1];
            month = date_parts[2];
            day = date_parts[3];
        }
    } else if (/^y{2}[./-]m{2}[./-]d{2}/.test(format)) {
        //EU Short Date
        date_parts = date_string.match(/^(\d{1,2})[./-](\d{1,2})[./-](\d{1,2})$/);
        if (date_parts) {
            year = date_parts[1];
            month = date_parts[2];
            day = date_parts[3];
        }
    } else if (/^y{4}[./-]m{2}[./-]d{2}/.test(format)) {
        //EU Long Date
        date_parts = date_string.match(/^(\d{4})[./-](\d{1,2})[./-](\d{1,2})$/);
        if (date_parts) {
            year = date_parts[1];
            month = date_parts[2];
            day = date_parts[3];
        }
    } else {
        rtrn = false;
    }
	
    if (date_parts) {
        if (1 <= month && month <= 12) {
            if (month == 2) {
                if (year % 4 != 0 ? false : ( year % 100 != 0? true: (year % 1000 != 0? false : true))) {
                    rtrn = (1 <= day && day <= 29);
                } else {
                    rtrn = (1 <= day && day <= 28);
                }
            } else {
                rtrn = (1 <= day && day <= days[month -1]);
            }
        }else {
		
            rtrn = false;
        }
    } else {
        rtrn = false;
    }
	
    return rtrn;
}//eof isValidDate

function isValidNumchar(value) {
  var objRegExp  = /([0-9a-zA-z])/;

  return objRegExp.test(value);
	
}