﻿function checkRequiredFieldElemId(elem_id, classNameOnValid, classNameOnError){
	var elem = document.getElementById(elem_id);
	if (elem){
		checkRequiredFieldElem(elem, classNameOnValid, classNameOnError);
	}
}

function checkRequiredFieldElemIds(arrElemIds, classNameOnValid, classNameOnError, controlIdSetCssClassName){
	var atLeastOneValid = false;
	if (arrElemIds.length > 0){
		for (var i = 0; i < arrElemIds.length; i++){
			var tempElem = document.getElementById(arrElemIds[i]);
			if (tempElem){
				switch (tempElem.type){
					case "radio":
						atLeastOneValid = tempElem.checked;
						break;
					default:
						break;
				}
			}
			if (atLeastOneValid){
				break;
			}
		}
	}
	
	var elem = document.getElementById(controlIdSetCssClassName);
	if (elem){
		//required info
		var idxRequired = elem.getAttribute("idxrequired");
		var errorMessageRequired = elem.getAttribute("emrequired");
		
		//className 'updaten'
		atLeastOneValid ? setClassNameElem(elem, classNameOnValid) : setClassNameElem(elem, classNameOnError);
		//bepaal de foutmelding
		if (atLeastOneValid){
			errorMessageRequired = "";
		}
		//update de foutmelding(en)
		updateErrorMessages(idxRequired, errorMessageRequired);
	}
}

function checkFieldElemName(elemName, classNameOnValid, classNameOnError) {
    var elem = document.getElementById(elemName);
    checkFieldElem(elem, classNameOnValid, classNameOnError);
}

function checkFieldElem(elem, classNameOnValid, classNameOnError){
	//init	
	var elem_id = elem.id;
	var elemValid = false;
	var idxErrorMessage = -1;
	var errorMessage = "";	

	//read element properties and attributes
	var elem_type = elem.type;
	
	//required info
	var idxRequired = elem.getAttribute("idxrequired");
	var errorMessageRequired = elem.getAttribute("emrequired");
	var required = false;
	if (errorMessageRequired){
		if (errorMessageRequired.length > 0){
			required = true;
		}
	}
		
	//syntax info
	var syntaxCheck = elem.getAttribute("syntaxcheck");
	var idxSyntax = elem.getAttribute("idxsyntax");
	var errorMessageSyntax = elem.getAttribute("emsyntax");
	
	//compare info
	var compareCheck = elem.getAttribute("comparecheck");
	var idxCompare = elem.getAttribute("idxcompare");
	var errorMessageCompare = elem.getAttribute("emcompare");
		
	
	//check element type
	if (elem_type == undefined){
		if (elem_id.indexOf("rblGeslacht") > -1){
			elem_type = "radiobuttonlist";
		}
	}
	
	//check if the field is required, if so check the fieldvalue
	if (required){
		//check whether or not the element is valid based on it's type
		switch(elem_type){
			case "radiobuttonlist":
				elemValid = true;
				idxRequired = elem.getAttribute("idxrequired_geboortenaam");
				break;
			case "select-one":
				elemValid = checkSelectBox(elem);
				break;
			case "password":
			case "text":
				elemValid = checkTextBox(elem);
				break;
			default:
				break;
		}
		
		//set index and errormessage
		idxErrorMessage = idxRequired;
		if (!elemValid){
			errorMessage = errorMessageRequired;
		}		
	} else {
		elemValid = true;
	}

	//update errormessage(s)
	updateErrorMessages(idxErrorMessage, errorMessage);
	
	//syntax check?
	if (elemValid){ //required field filled out or not required
		if (syntaxCheck){
			elemValid = checkSyntax(elem, syntaxCheck);
			if (elemValid == null){
				elemValid = false;
			}
						
			//set index and errormessage
			idxErrorMessage = idxSyntax;
			if (!elemValid){
				errorMessage = errorMessageSyntax;
			}
		}
	}

	//update errormessage(s)
	updateErrorMessages(idxErrorMessage, errorMessage);

	//compare check?
	if (elemValid){ //required field filled out or not required and syntax ok or no syntax check
		if (compareCheck){
			elemValid = checkEqual(elem, compareCheck);

			//set index and errormessage
			idxErrorMessage = idxCompare;
			if (!elemValid){
				errorMessage = errorMessageCompare;
			}
		}
	}

	//update className, check if the classname of a different html control has to be updated
	var clientIDSetCssClassName = elem.getAttribute("clientIDSetCssClassName");
	var elemSetClassName;
	if (clientIDSetCssClassName != null){
		elemSetClassName = document.getElementById(clientIDSetCssClassName);
	} else {
		elemSetClassName = elem;	
	}
	
	elemValid ? setClassNameElem(elemSetClassName, classNameOnValid) : setClassNameElem(elemSetClassName, classNameOnError);
	
	//update className, check if the classname of an extra html control has to be updated
	var clientIDExtraSetCssClassName = elem.getAttribute("clientidextra");
	if (clientIDExtraSetCssClassName != null){
		setClassNameElemId(clientIDExtraSetCssClassName, classNameOnValid);
	}
	
	//update error message(s)
	updateErrorMessages(idxErrorMessage, errorMessage);
	
}

function checkSelectBox(elem){ //assumption: index 0 contains a value which can interpreted as 'empty'/no selection.
	return elem.selectedIndex > 0;
}

function checkTextBox(elem){
	return elem.value.length > 0;
}

function setClassNameElemId(elem_id, className){
	var elem = document.getElementById(elem_id);
	if (elem){
		setClassNameElem(elem, className);
	}
}

function setClassNameElem(elem, className){
	elem.className = className;	
}

function updateErrorMessages(idxErrorMessage, errorMessage){
	var hidValClientErrors = document.getElementById('hidValSummaryErrors');
	if (hidValClientErrors){
		var valSummaryClientErrors = hidValClientErrors.value;
		if (valSummaryClientErrors.length > 0){
			var divErrorMessages = document.getElementById(valSummaryClientErrors);
			if (divErrorMessages){
				var currentErrorMessages = divErrorMessages.innerHTML;
				initArray(currentErrorMessages);
				if (isArray(g_arrErrorMessages)){
					g_arrErrorMessages[idxErrorMessage] = errorMessage;
				}
				var currentErrorMessages = getCurrentErrorMessages();
				//update the div which contains the errormessage(s)
				divErrorMessages.innerHTML = currentErrorMessages;
				//check whether or not the div must be shown
				currentErrorMessages.length > 0 ? showJSLayer(valSummaryClientErrors) : hideJSLayer(valSummaryClientErrors);
			}
		}
	}
}

var g_arrErrorMessages; //n.b. global array
function initArray(currentErrorMessages){
	if (!g_arrErrorMessages){
		g_arrErrorMessages = new Array(50);
		for (idx in g_arrErrorMessages){
			g_arrErrorMessages[idx] = "";
		}
		//check current errormessage(s)
		if (currentErrorMessages.length > 0){
			var arrCurrentErrorMessages = currentErrorMessages.split(/<br>/i); // (/i = case insensitive split): IE: <BR>; FF: <br>
			if (arrCurrentErrorMessages.length > 0){
				for (idxErrorMessage in arrCurrentErrorMessages){
					var tmpErrorMessage = arrCurrentErrorMessages[idxErrorMessage];
					var tmpElemErrorAndIndex = document.getElementById(tmpErrorMessage);
					if (tmpElemErrorAndIndex){
						var tmpIndex = tmpElemErrorAndIndex.value;
						g_arrErrorMessages[tmpIndex] = tmpErrorMessage;
					}
				}
			}
		}
	}
}

function getCurrentErrorMessages(){
	var result = "";
	var htmlBreak = "<br />";
	if (g_arrErrorMessages){
		if (isArray(g_arrErrorMessages)){
			for (idxErrorMessage in g_arrErrorMessages){
				if (g_arrErrorMessages[idxErrorMessage].length > 0){
					result += (g_arrErrorMessages[idxErrorMessage] + htmlBreak);
				}
			}
		}	
	}
	//remove trailing <br />
	var errorMessageLength = (result.length - htmlBreak.length);
	result = result.substr(0, errorMessageLength); 
	return result;		
}

function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function checkSyntax(elem, syntaxCheck){
	//init
	var elemValid = false;
	var elem_value = elem.value;
	//check value
	if (elem_value.length > 0){
		switch(syntaxCheck){
			case "emailadres":
				elemValid = isGebruikersnaam(elem_value);
				break;
			case "huisnummer":
				elemValid = isHuisnummer(elem_value);
				break;
			case "pccijfer":
				elemValid = isPostcodeCijfers(elem_value);
				break;
			case "pcletter":
				elemValid = isPostcodeLetters(elem_value);
				break;
			case "telefoonmobiel":
				//get digit(s)
				var digits = getDigits(elem_value);
				if (digits.length > 1) {
					//get first 2 digits
					var first2Digits = digits.substr(0, 2);
					//check if element value is valid
					elemValid = (first2Digits == "06") && (digits.length == 10);
				}
				break;
			case "telefoonthuis":
				//get digit(s)
				var digits = getDigits(elem_value);
				//check if element value is valid
				elemValid = (digits.length == 10);
				break;
			case "waardebon":
				elemValid = isWaardebon(elem_value);
				break;
			case "wachtwoord":
				elemValid = isWachtwoord(elem_value);
				break;
			default:
				break;
		}
	} else {
		elemValid = true;	
	}
	return elemValid;
}

function checkEqual(elem, elem_id){
	//init
	elemValid = false;
	var compareElem = document.getElementById(elem_id);
	if (compareElem){
		elemValid = (elem.value == compareElem.value);
	}
	return elemValid;
}

//this function returns a string with everything but the digits removed. 
function getDigits(s) { 
   return s.replace(/[^\d]/g, "");
}

//Deze functie valideert als er een andere notificateivoorkeur is gekzoen
function ValidateAndereNotificatieVoorkeurGekozen(idRadioButtonAndereVoorkeur, idTextBoxAndereVoorkeur, idErrorMessagesDiv){
    var NeedToValidate = false; //Geeft aan of er wel gevalideerd moet worden
    var IsEmail = false; //Geeft aan of het een emailadres
    var IsTelefoonNummer = false; // Geeft aan of het een telefoonnummer is
    var textboxAndereVoorkeur; //Het textbox wat gevalideerd moet worden
    
    var radioButtonAndereVoorkeur = document.getElementById(idRadioButtonAndereVoorkeur);
    //radioButtonAndereVoorkeur gevonden?
    if(radioButtonAndereVoorkeur != null){
        //radioButtonAndereVoorkeur selected
        if(radioButtonAndereVoorkeur.checked){
            //Het veld is gechecked nu is validate nodig
            NeedToValidate = true;
            //Probeer de textbox op te halen
            textboxAndereVoorkeur = document.getElementById(idTextBoxAndereVoorkeur);
            if(textboxAndereVoorkeur != null){
                //Is er iets ingevuld?
                if(textboxAndereVoorkeur.value.length > 0){
                    //Controleren of het een telefoonnummer is
                    var RegExTelefoonNummer = new RegExp("^0[0-9]{9}$");
                    if(RegExTelefoonNummer.test(textboxAndereVoorkeur.value)){
                        IsTelefoonNummer = true;
                    }
                   
                    //Controleren of het een emailadres is
                    if(isGebruikersnaam(textboxAndereVoorkeur.value)){
                        IsEmail = true;
                    }
                }
            }
        }           
    }
    
    //Moest er gevalideerd worden?
    if(NeedToValidate){
        //Is validatie gelukt
        if(IsEmail || IsTelefoonNummer){
            textboxAndereVoorkeur.className = "normal";
            return true;
        }else{
            textboxAndereVoorkeur.className = "normal required";
            //Haal de div op voor de errors
            var divJavaScriptErrors = document.getElementById(idErrorMessagesDiv);
            if(divJavaScriptErrors != null){
                divJavaScriptErrors.style.display = 'block';
                //Verwijder alle nodes
                if (divJavaScriptErrors && divJavaScriptErrors.hasChildNodes && divJavaScriptErrors.removeChild) {
					while (divJavaScriptErrors.hasChildNodes()) {
						divJavaScriptErrors.removeChild(divJavaScriptErrors.firstChild);
					}
				}
                divJavaScriptErrors.appendChild(document.createTextNode('Ongeldige notificatievoorkeur opgegeven.'));
            }
            return false;
        }               
    } else {
        return true;
    }
}

// valideer een datum op geldigheid.
//maand 1-12, dag 1-31, jaar 4 cijfers
function ValidateDate(jaar, maand, dag) {
    var intJaar;  
    var intMaand;
    var intDag;

    // eventuele voorloopnullen eraf strippen, de parseInt valt daar soms over
    if (dag.substr(0, 1) == '0' && dag.length > 1) {
        dag = dag.substr(1, 2);
    }
    if (maand.substr(0, 1) == '0' && maand.length > 1) {
        maand = maand.substr(1, 2);
    }

    // maand van  0 - 11        
    intMaand = parseInt(maand) - 1;
    intDag = parseInt(dag);
    intJaar = parseInt(jaar);
    
    var myDate = new Date();
    myDate.setFullYear(intJaar, intMaand , intDag)
    if ((myDate.getMonth() == intMaand) && (myDate.getDate() == intDag)) {
        return true;
    } else {
        return false;
    }
}

