
/**
 * Check a value on a regular expression
 *
 * String mask: regular expression
 * String value: the value to test
 * Returns boolean
 * if(!checkRegExp('^([a-zA-Z0-9_\\-\\.]+)@(\\[?([0-9]{1,3}\\.){3}|([a-zA-Z0-9\\-]+\\.)+)([a-zA-Z]{2,4}|[0-9]{1,3}\\]?)$',document.subscriptionform.email.value)){messages.push('E-mail adres. Vul hier een e-mail adres in met het volgende formaat: naam@domein.nl, voorbeeld: \'j.jansen@hetnet.nl\'');}
 * if(!checkRegExp('^([0-9]{4})(\\\s)([A-Z]{2})$',document.subscriptionform.zip.value)){messages.push('Postcode. Vul hier postcode in met het volgende formaat \'NNNN AA\', voorbeeld: \'1234 AB\' ');} 
 * if(!checkRegExp('^([0-9]{1,2})(\\-)([0-9]{1,2})(\\-)([0-9]{4})$',document.subscriptionform.birthdate.value)){messages.push('Geboortedatum. Vul hier een datum in met het volgende formaat \'dd-mm-jjjj\', voorbeeld: \'01-01-1970\'');} 
 * if(!checkRegExp('^([0-9]{1,10})$',value)){messages.push('Telefoon. Vul hier alleen cijfers in');} 
 
 */

function checkRegExp(mask, value)
{
	if (!isEmpty(value))
	{
		var re = new RegExp(mask);
		var ok = re.test(value);
		return ok;
	}
	return true;
}

/**
 * Check a required status for a field, if empty returns true
 */
function checkRequired(field)
{
	if(field==null){return false;}
	if (field.type=="checkbox") return !field.checked;
	if (field.type == "select-one") return (isEmpty(field.value) || field.value=='-1')
	return isEmpty(field.value);
}

function checkWithRequiredMarker(field)
{
	if (checkRequired(field)) {
		setRequiredMarker(field);
		return true;
	}
	return false;
}

/*
 * Some set/reset requiredmarker 
*/
function setRequiredMarker(myObject) 
{
	if(myObject==null){return;}
	clazz = myObject.className;
	if (clazz.indexOf("requiredmarker")<0) {
		clazz = clazz + " requiredmarker";
		myObject.className=clazz;
	}
	// also try _dpl field recursive
	name = myObject.name
	if (name.indexOf("_dpl")<0) {
		setRequiredMarker(document.getElementById(name+"_dpl"));
	}
}
function resetRequiredMarker(myObject) 
{
	if(myObject==null){return;}
	clazz = myObject.className;
	clazz = clazz.replace(/requiredmarker/ig," ");
	clazz = clazz.replace(/  /ig," ");
	myObject.className=clazz;
}
function resetAllRequiredMarkers(myForm) 
{
	if(myForm==null){return;}
	for (var i=0;i<myForm.length;i++) {
		resetRequiredMarker(myForm.elements[i]);
	}
}

/**
 * Loop all formfields and check if requiredmessage is filled and value is empty
 * If so then add a required message to messages
 */
function addRequiredFormFields(form,messages,marker)
{
	if(marker==null)
		marker=true;
	if (form!=null && messages!=null)
	{
		for(var i=0;i<form.length;i++)
		{
			e = form.elements[i];
			if (e.requiredmessage>' ')
			{
				if (e.type=="checkbox") {
					if (!e.checked) {
						messages.push(e.requiredmessage);
						if (marker) setRequiredMarker(e);
					}
				}
				else if(e.type == "select-one"){
					if (e.value<' ' || e.value=='-1') {
						messages.push(e.requiredmessage);
						if (marker) setRequiredMarker(e);
					}
				}
				else if (e.value<' ') {
					messages.push(e.requiredmessage);
					if (marker) setRequiredMarker(e);
				}
			}
		}
	}
}
function validateForm(form,messages)
{
	var message = "";
	if(messages.length>0){
		for(var i=0;i<messages.length;i++){
			message=message+"- "+messages[i]+"\n";
		}
		alert(message);
		return false;
	}
	else
	{
		return true;
	}
}


function isEmpty(value)
{
	if (value==null) return true;
	if (value.length==0) return true;
	return false;
}

function compareValues(field1,field2)
{
	if(field1==null || field2==null){return false;}
	return field1.value==field2.value;
}

function getNewLine(){return "\n";}
function showHand(element){element.style.cursor='hand';}
function showCursor(element){element.style.cursor='default';}

// Check for mail function

function checkmail(button)
{
	if(!compareValues(document.emailform.email1,document.emailform.email2))
	{
			alert('Beide adressen dienen gelijk te zijn');
	}
	else
	{
			document.emailform.submit();
	}
}

function getkey(e)
{
	if (window.event) return window.event.keyCode;
	if (e) return e.which;
	return null;
}

function fieldclear(element)
{
	if(element!=null){
		element.value='';
	}
}
function enableOnValue( parentelement, element, value ) {
		var control = document.getElementById(element);
		if (!control) {
			alert ("Besturingselement " + element + " is niet gevonden in het formulier!" );
			return;
		}
		var parentvalue;
		switch (parentelement.type) {
		case 'checkbox':
			parentvalue = (parentelement.checked ? parentelement.value : '');
			break;
		default:
			parentvalue = parentelement.options[parentelement.selectedIndex].value
			break;
		}
		if (parentvalue == value) {
			control.disabled = false;
		} else {
			control.disabled = true;
			switch (control.type) {
			case 'checkbox':
				control.checked = false;
				break;
			case 'select':
				if (control.selectedIndex) {
					control.selectedIndex=0;
				} else {
					control.value='';
				}
				break;
			default:
				control.value='';
			}
		}			
	}

// value is formatted as dd-mm-jjjj hh:mm:ss or dd-mm-jjjj
function datePastToday(value) {
	var hh,mm,ss;
	var jjjj,mon,dd;
	var timepart = '';
	if (!value) return false;
	var parts = value.split('-');
	if (parts.length != 3) return false;
	dd = parts[0];
	mon = parts[1];
	var tmp = parts[2];
	tmp = tmp.split(' ');
	jjjj = tmp[0];
	if (tmp.length > 1) {
		timepart = tmp[1].split(':');
	}
	if (timepart.length != 3) {
		hh = 0;
		mm = 0;
		ss = 0;
	}			
	if (timepart.length >= 0) 
		hh = timepart[0];
	if (timepart.length >= 1) 
		mm = timepart[1];
	if (timepart.length >= 2) 
		ss = timepart[2];

	var fieldvalue = "" + padZeroLeft(jjjj,4) + padZeroLeft(mon,2) + padZeroLeft(dd,2) + padZeroLeft(hh,2) + padZeroLeft(mm,2) + padZeroLeft(ss,2);
	var now = new Date();
	var nowvalue = "";
	nowvalue += padZeroLeft(now.getYear(),4); 
	nowvalue += padZeroLeft(now.getMonth()+1,2);
	nowvalue += padZeroLeft(now.getDate(),2);
	nowvalue += padZeroLeft(now.getHours(),2);
	nowvalue += padZeroLeft(now.getMinutes(),2);
	nowvalue += padZeroLeft(now.getSeconds(),2);	
	return nowvalue < fieldvalue;
}
	
function padZeroLeft( value, positions ) {
	var strvalue = "" + value;
	while (strvalue.length < positions) {
		strvalue = "0" + strvalue;
	}
	return strvalue;
}
	
/**
 * check wether a variable exists within object
 */
function isDefined(object, variable)
{
	return (typeof(eval(object)[variable])!='undefined');
}
	
/**
 * Obj: the object of wich to check wether it is a array
 */
function isArray(obj)
{
	if(obj == null) return false;
	return(typeof(obj.length)=="undefined")?false:true;
}

function fillAliasSelectFields(form)
{
	if (form!=null)
	{
		for(var i=0;i<form.length;i++)
		{
			e = form.elements[i];
			if (e.type == "select-one")
			{
				alias = document.getElementById("alias_"+e.name);
				if (e!=null)
				{
					alias.value=e.options[e.selectedIndex].text;
					//alert (e.name+" aliasvalue="+alias.value+" alias type="+alias.type);
				}
			}
		}
	}
}

function hideOrShowDivs(prefix,show) 
{
	hideOrShowElements("div",prefix,show);
}

function hideOrShowElements(element,prefix,show) 
{
	var style = (show) ? "block" : "none";
	if (element == "tr")
		style = (show) ? ((document.all) ? "block" : "table-row") : "none"; // Only IE thinks that rows are blocks.
	
	arr_nodes = document.getElementsByTagName(element); 
	for (i = 0; i < arr_nodes.length; i++) { 
		obj_node = arr_nodes[i];
		if (obj_node.id>'' && obj_node.id.length>=prefix.length && obj_node.id.substr(0,prefix.length)==prefix) {
			obj_node.style.display=style;
		}
	}
}

function clear(element)
{
	if (element!=null)
	{
		if (element.type=="checkbox") {
			element.checked=false;
		}
		else if(element.type == "select-one"){
			element.selectedIndex=0;
		}
		else {
			element.value='';
		}
		if (element.onchange)
			element.onchange();
		if (element.onblur)
			element.onblur();
	}
}
	
function setCheckBoxField(element) 
{
	if(element==null){return;}
	if ("checkbox"==element.type)
	{
		fld = document.getElementById(element.name.substr(3));
		if (fld!=null)
		{
			fld.value=element.checked;
		}
	}
}

/*
* returns true if one of the checbox is checked
* TODO if main checked then sub must also be checked ALWAYS
*/
function checkRequiredCheckBoxRange(form,prefix)
{
	if (prefix<='') return;
	onechecked = false;	
	// first loop to check
	main = 1;
	while(main>0 && !onechecked) {
		me = document.getElementById(prefix+"_"+main);
		if (me) {
			sub = 1;
			while(sub>0 && !onechecked) {
				se = document.getElementById(prefix+"_"+main+"_"+sub);
				if (se) {
					if (se.checked) {
						onechecked=true;
					}
					sub = sub + 1;
				}
				else { // geen subs meer
					if (sub==1) {// no subs defined so main is required 
						if (me.checked) {
							onechecked=true;
						}
					}
					sub=0; // quit loop
				}
			}
			main = main+1;
		}
		else {
			main=0; // quit loop
		}
	}
	if (!onechecked) {
		// loop to set marker
		main = 1;
		while(main>0) {
			me = document.getElementById(prefix+"_"+main);
			if (me) {
				setRequiredMarker(me);
				sub = 1;
				while(sub>0) {
					se = document.getElementById(prefix+"_"+main+"_"+sub);
					if (se) {
						setRequiredMarker(se);
					sub = sub + 1;
					}
					else {
						sub=0; // quit loop
					}
				}
				main = main+1;
			}
			else {
				main=0; // quit loop
			}
		}
	}
	return onechecked;
}
