/* */

//Deze functie krijgt binnen of een vinkje aan of uit gezet is. 
//Als het uitgezet wordt, dan wordt een andere checkbox(targetElement) ook uitgezet en ge-disabled.
function enableDisableCheckbox(checked, targetElement)
{

	//alert(targetElement);

 	if(checked)
	{
		//alert('check is aan');
		document.getElementById(targetElement).disabled = false;
	}
	else
	{
		//alert('check is uit');
		document.getElementById(targetElement).checked = false;
		document.getElementById(targetElement).disabled = true;
	}	
}

function checkSelectedTimecardType(value) {
	if(value == 'regular-1') {
		document.getElementById('period1_div').style.display = '';
		document.getElementById('period2_div').style.display = 'none';
		document.getElementById('period3_div').style.display = 'none';
		document.getElementById('period1').disabled = false;
		document.getElementById('period2').disabled = true;
		document.getElementById('period3').disabled = true;
		document.getElementById('periodTitle').style.display = '';
	} else if(value == 'regular-2') {
		document.getElementById('period1_div').style.display = 'none';
		document.getElementById('period2_div').style.display = '';
		document.getElementById('period3_div').style.display = 'none';
		document.getElementById('period1').disabled = true;
		document.getElementById('period2').disabled = false;
		document.getElementById('period3').disabled = true;
		document.getElementById('periodTitle').style.display = '';
	} else if(value == 'regular-3') {
		document.getElementById('period1_div').style.display = 'none';
		document.getElementById('period2_div').style.display = 'none';
		document.getElementById('period3_div').style.display = '';
		document.getElementById('period1').disabled = true;
		document.getElementById('period2').disabled = true;
		document.getElementById('period3').disabled = false;
		document.getElementById('periodTitle').style.display = '';
	} else {
		document.getElementById('period1_div').style.display = 'none';
		document.getElementById('period2_div').style.display = 'none';
		document.getElementById('period3_div').style.display = 'none';
		document.getElementById('period1').disabled = false;
		document.getElementById('period2').disabled = false;
		document.getElementById('period3').disabled = false;
		document.getElementById('periodTitle').style.display = 'none';
	}	

	if(value!= "") {
		document.getElementById('min_week').disabled = true;
		document.getElementById('max_week').disabled = true;
		document.getElementById('startDate').disabled = true;
		document.getElementById('endDate').disabled = true;
	} else {
		document.getElementById('min_week').disabled = false;
		document.getElementById('max_week').disabled = false;
		document.getElementById('startDate').disabled = false;
		document.getElementById('endDate').disabled = false;
	}

}

function enable_disable_emailfields(name) {
	if(name == 'none' || name == 'test') {
		if(name == 'none') {
			try { document.getElementById('emailtest_tr').style.display = 'none'; } catch(e){}	
		} else {
			try { document.getElementById('emailtest_tr').style.display = ''; } catch(e){}
		}
		try { document.getElementById('emailquestion_tr').style.display = 'none'; } catch(e){}
		try { document.getElementById('emailexception_tr').style.display = 'none'; } catch(e){}
		try { document.getElementById('emailapprovedtimecards_tr').style.display = 'none'; } catch(e){}
		try { document.getElementById('emailtimecardcorrection_tr').style.display = 'none'; } catch(e){}
		try { document.getElementById('emailexcel_tr').style.display = 'none'; } catch(e){}
		try { document.getElementById('all').style.display = 'none'; } catch(e){}
	} else if(name == 'normal') {
		try { document.getElementById('emailtest_tr').style.display = 'none'; } catch(e){}
		try { document.getElementById('emailquestion_tr').style.display = ''; } catch(e){}
		try { document.getElementById('emailexception_tr').style.display = ''; } catch(e){}
		try { document.getElementById('emailapprovedtimecards_tr').style.display = ''; } catch(e){}
		try { document.getElementById('emailtimecardcorrection_tr').style.display = ''; } catch(e){}
		try { document.getElementById('emailexcel_tr').style.display = ''; } catch(e){}
		try { document.getElementById('all').style.display = ''; } catch(e){}
	}
}

function enable_email_inputbox(id) {
	element = id + "-specific";
	inputbox = id + "-email";
	if(document.getElementById(element).checked == true) {
		document.getElementById(inputbox).disabled = false;	
		document.getElementById(inputbox).className = "";
	} else {
		document.getElementById(inputbox).disabled = true;
		document.getElementById(inputbox).className = "disabled";
	}
}

function resizeMobileLogo() {
        var logo = document.getElementById('logo');
        if (logo != undefined) {
                width = logo.clientWidth;
                if (width > 200) {
                	logo.width = 200;
                }
                height = logo.clientHeight;
                if (height > 70) {
                	logo.height = 70;
                }

        }
}

//Deze functie contoleerd of er voor de regel in het gegroepeerde PT6 briefje (een los briefjes dus) een valide aantal dagen ingevuld is, zoja dan wordt het temp-approve vinkje op enabled ge-set. 
function check_totalDays_PT6(day_field, temp_approve_field) {
	var value = document.getElementById(day_field).value;
	value = value.replace(",",".");
	
	document.getElementById(day_field).value = value;
	
	if ((isNaN(value)) || (value.length == 0) || value < 0 || value > 7) 
	{
		document.getElementById(temp_approve_field).disabled = true;
		document.getElementById(temp_approve_field).checked = false;
	} 
	else 
	{
		document.getElementById(temp_approve_field).disabled = false;
	}
}

function enableTotalFields() {
	var day;
	for(i=0;i<7;i++) {
		day = document.getElementById('total'+i);
		if(day != undefined) {
			day.disabled = false;
		}
	}
	return false;
}


Array.prototype.in_array = function (element)
{
	for (var values in this) {
		if (this[values] == element) {
			return true;
		}
	}

	return false;
};

// Trim whitespace left and right from the String
String.prototype.trim = function() {
	return this.replace(/^\s+/, '').replace(/\s+$/, '');
}

function repos_form_group2() {
	//nodig om de o.a. tabel header en div van het grouped UB te positioneren
	var mainDiv = document.getElementById('mainDiv');
	var top1 = document.getElementById('top1');
	var top_balk = document.getElementById('top_balk');
	var footer_balk1 = document.getElementById('footer_balk1');
	var footer_balk2 = document.getElementById('footer_balk2');
	var theDiv = document.getElementById('theDiv');
	var tabel = document.getElementById('theTable');

	//breedte van het scherm bepalen
	var BodyWidth = document.getElementById('top1').offsetWidth;

	headerHeight = document.getElementById('positionHeader').clientHeight;
	headerWidth = document.getElementById('positionHeader').clientWidth;

	//Top-balk heeft links een padding van 28px dus ook 28 minder breed.
	//Er is aan beide een margin van 10px (20 totaal dus) waar ook rekening mee gehouden moet worden.
	//Header en footer mogen alleen breder gemaakt worden. Niet kleiner dan standaard
	if(headerWidth > BodyWidth) {
		top1.style.width = headerWidth+20;
		top_balk.style.width = headerWidth-28+20;
		footer_balk1.style.width = headerWidth+20;
		footer_balk2.style.width = headerWidth+20;
	}

	theDiv.style.width = headerWidth;
	if(navigator.appName == "Microsoft Internet Explorer"){
		theDiv.style.overflowY = "auto";
		theDiv.style.overflowX = "hidden";
	}
	tabel.style.marginTop =  headerHeight+'px';
	tabel.style.width = theDiv.clientWidth;
	reposition('positionHeader');
}

function min(a, b) {
	return (a < b ? a : b);
}

function max(a, b) {
	return (a > b ? a : b);
}

//BEGIN GEGROEPEERDE URENBRIEFJES FUNCTIONS *******************************************

function grouped_selectAll(flexcount) {
	if (document.getElementById('approve_all').checked == false) {
		for(i=0; i < flexcount;i++) {
			if(document.getElementById('approve'+i).disabled == false) {
				document.getElementById('approve'+i).checked = false;
			}
		}
	} else {
		for(i=0; i < flexcount;i++) {
			if(document.getElementById('approve'+i).disabled == false) {
				document.getElementById('approve'+i).checked = true;
			}
		}
	}
}

function compare_hour(new_value, previous_value, assignmentid, counter) {
	//eventuele komma vervangen door een punt
	splitArray = new_value.split(',');
	if (splitArray.length > 1) {
		new_value = splitArray[0] + '.' + splitArray[1];
	}
	field = document.getElementById('flexid'+assignmentid+'_rate'+counter+'_hour');
	if(new_value != previous_value && previous_value != undefined) {
		field.className = 'grouped_color';
	} else if (new_value == previous_value) {
		field.className = 'grouped_white';
	}
}

function compare_allowance(new_value, previous_value, assignmentid, counter) {
	//eventuele komma vervangen door een punt
	splitArray = new_value.split(',');
	if (splitArray.length > 1) {
		new_value = splitArray[0] + '.' + splitArray[1];
	}
	field = document.getElementById('flexid'+assignmentid+'_allowance'+counter);
	if(new_value != previous_value && previous_value != undefined) {
		field.className = 'grouped_color';
	} else if (new_value == previous_value) {
		field.className = 'grouped_white';
	}
}

function compare_values(new_value, previous_value, assignmentid, fieldname) {
	//eventuele komma vervangen door een punt
	splitArray = new_value.split(',');
	if (splitArray.length > 1) {
		new_value = splitArray[0] + '.' + splitArray[1];
	}
	field = document.getElementById('flexid'+assignmentid+'_'+fieldname);
	if(new_value != previous_value && previous_value != undefined) {
		field.className = 'grouped_color';
	} else if (new_value == previous_value) {
		field.className = 'grouped_white';
	}
}

function calculate_kmvergoeding(assignmentid, ratecount, vergoeding_oud) {
	//Eerst het totaal berekenen
	var total = 0;
	for(i=0; i < ratecount;i++) {
		value = document.getElementById('flexid'+assignmentid+'_rate'+i+'_hour').value;
		if (value != '') {
			splitArray = value.split(',');
			if (splitArray.length > 1) {
				value = splitArray[0] + '.' + splitArray[1];
			}
			temp = parseFloat(value);
			total += temp;
		}
	}
	//Als totaal hoger is dan 40 dan op 40 zetten.
	if(total > 40) {
		total = 40;
	}
	//factor ophalen.
	factor = document.getElementById('flexid'+assignmentid+'_factor').value;
	//kmvergoeding berekenen
	splitArray = factor.split(',');
	if (splitArray.length > 1) {
		factor = splitArray[0] + '.' + splitArray[1];
	}
	var vergoeding = Math.round((total*factor)*100)/100;
	vergoeding_field = document.getElementById('flexid'+assignmentid+'_kmvergoeding');
	vergoeding_field.value = vergoeding;
}

function addConsulent() {
	teller = document.getElementById('consulent').getElementsByTagName('select').length;
	consulentDiv = document.getElementById('consulent');
	newDiv = document.getElementById("consulent_"+teller).cloneNode(true);
	newDiv.id="consulent_"+(teller+1);
	consulentDiv.appendChild(newDiv);
	teller +=1;
}

function reposition_div() {
	headerWidth = document.getElementById('positionHeader').clientWidth;
	var top_balk = document.getElementById('top_balk');
	var top_balk_width = document.getElementById('top_balk').clientWidth;

	var theDiv = document.getElementById('theDiv');
	var footer_balk1 = document.getElementById('footer_balk1');
	var footer_balk2 = document.getElementById('footer_balk2');

	theDiv.style.width = headerWidth;
	//header en footer balk moeten ook meegroeien als het groter wordt.
	if (headerWidth > top_balk_width) {
		top_balk.style.width = headerWidth;
		footer_balk1.style.width = headerWidth;
		footer_balk2.style.width = headerWidth;
	}
}

function enableAll(flexArray, ratecount, allowancecount) {
	for(i=0; i < flexArray.length; i=i+1){
		//Totaal urensoorten velden allemaal enabled maken
		for(k=0; k < ratecount; k=k+1) {
			document.getElementById("flexid"+flexArray[i]+"_rate"+k+"_hour").disabled = false;
			document.getElementById("flexid"+flexArray[i]+"_rate"+k+"_day").disabled = false;
		}
		for(k=0; k < allowancecount; k=k+1) {
			document.getElementById("flexid"+flexArray[i]+"_allowance"+k).disabled = false;
		}
	}
}

//Deze functie zorgt ervoor dat alle uren per dag weer op 0 komen te staan als de week ingeklapt is en de totaal uren worden veranderd.
function resetDayHours(resourceid, ratenumber, daycounter) {
	//Totaal aantal uren ophalen wat bovenin staat.
	totalValue_hours = document.getElementById('flexid'+resourceid+'_rate'+ratenumber+'_hour').value;

	//Totaal aantal dagen ophalen wat bovenin staat.
	totalValue_days = document.getElementById('flexid'+resourceid+'_rate'+ratenumber+'_day').value;

	if (document.getElementById("flexid"+resourceid+"_dag0") != null) {

		//Totaal aantal uren en dagen berekenen wat per dag in gevuld is.
		counter_hour = 0
		counter_day = 0
		for (i=0; i < daycounter; i=i+1) {
			field = document.getElementById("flexid"+resourceid+"_rate"+ratenumber+"_dag"+i);
			value = field.value;
			if (value != '') {
				splitArray = value.split(',');
				if (splitArray.length > 1) {
					value = splitArray[0] + '.' + splitArray[1];
				}
				temp = parseFloat(value);
				counter_hour += temp;
				counter_day = counter_day + 1;
			}
		}

		//Alleen als het totaal aantal dagen of uren veranderd is, dan resetten.
		if ((totalValue_hours != counter_hour) || (totalValue_days != counter_day)) {
			for (i=0; i < daycounter; i=i+1) {
				document.getElementById("flexid"+resourceid+"_rate"+ratenumber+"_dag"+i).value = '';
			}
		}
	}else{
		changedField = resourceid+'rate'+ratenumber + "_hours=" + totalValue_hours;
//		changedField = resourceid+'rate'+ratenumber + "=" + totalValue_hours;
		i=0;
		for(keyVar in changedFields)
		{
			if(changedFields[keyVar] == changedField)
				break;
				i++;
		} 

		if (i == changedFields.length)
		{
			if(changedFields[resourceid] == undefined)
				changedFields[resourceid] = new Array();
			changedFields[resourceid].push(changedField);
			changedFields[resourceid].push(resourceid+'rate'+ratenumber + "_days=" + totalValue_days);
		}

	}
}

//zelfde functie als hierboven maar dan voor de onkosten
function resetAllowance(resourceid, allowancenumber, daycounter) {
	//Totaal aantal onkosten ophalen wat bovenin staat.
	totalValue = document.getElementById('flexid'+resourceid+'_allowance'+allowancenumber).value;

	if (document.getElementById("flexid"+resourceid+"_dag0") != null) {
		counter = 0
		for (i=0; i < daycounter; i=i+1) {
			field = document.getElementById("flexid"+resourceid+"_allowance"+allowancenumber+"_dag"+i);
			value = field.value;
			if (value != '') {
				splitArray = value.split(',');
				if (splitArray.length > 1) {
					value = splitArray[0] + '.' + splitArray[1];
				}
				temp = parseFloat(value);
				counter += temp;
			}
		}

		//Alleen de onkosten per dag resetten als het totaal van dit afwijkt van het totaal bovenin.
		if (totalValue != counter) {
			for (i=0; i < daycounter; i=i+1) {
				document.getElementById("flexid"+resourceid+"_allowance"+allowancenumber+"_dag"+i).value = '';
			}
		}
	}else{
		changedField = resourceid+'allowance'+allowancenumber + "=" + totalValue;
		i=0;
		for(keyVar in changedFields)
		{
			if(changedFields[keyVar] == changedField)
				break;
				i++;
		} 
		if (i == changedFields.length){
			if(changedFields[resourceid] == undefined)
				changedFields[resourceid] = new Array();
			changedFields[resourceid].push(changedField)
		};
	}
}


//Deze functie voegt een urensoort kolom toe aan het urenbriefje
function addRate(flexArray, ratecounter, daycounter, specialRatesArray, round3minutes) {
	//Prevent older browsers from getting any further.
	if(!document.getElementById) return;
	ratecount = parseFloat(ratecounter);

	//De regel hieronder zorgt ervoor dat voeg een urensoort toe niet werk als toe te voegen urensoort
	elem = document.getElementById('newRate');
	if (elem.options[0].selected ==true) return;

	//Gekozen urensoort waarde uit selectbox halen
	newRate = document.add_multiple.newRate.options[document.add_multiple.newRate.selectedIndex].value;
	newRateName = document.add_multiple.newRate.options[document.add_multiple.newRate.selectedIndex].id;
	newRateName = newRateName.substr(9); //id komt binnen met "extrarate" voor het id geplakt.
	document.add_multiple.newRate.remove(document.add_multiple.newRate.selectedIndex);

	//TH en TR ophalen
	th = document.getElementById('generated_rateTitle');
	var tr = th.parentNode;

	//nieuwe TH urentitle aanmaken
	var newTH_urenTitle = document.createElement("th");
	newTH_urenTitle.innerHTML="uren "+"<br/>"+newRateName;
	//newTH_urenTitle.style.whiteSpace="nowrap";
	newTH_urenTitle.style.paddingRight="10px";
	newTH_urenTitle.setAttribute("class", "newform_head");
	newTH_urenTitle.setAttribute("title", "uren "+newRate);
	newTH_urenTitle.setAttribute("name", newRate+"_hour");
	newTH_urenTitle.setAttribute("id", newRate+"_day");
	tr.insertBefore(newTH_urenTitle, th);

	//nieuwe TH dagentitle aanmaken
	var newTH_dagenTitle = document.createElement("th");
	newTH_dagenTitle.innerHTML="dagen "+"<br/>"+newRateName;
	//newTH_dagenTitle.style.whiteSpace="nowrap";
	newTH_dagenTitle.style.paddingRight="10px";
	if (specialRatesArray.in_array(newRate) == false) {
		newTH_dagenTitle.style.display="none";
	}
	newTH_dagenTitle.setAttribute("class", "newform_head");
	newTH_dagenTitle.setAttribute("title", "dagen "+newRate);
	newTH_dagenTitle.setAttribute("name", newRate+"_hour");
	newTH_dagenTitle.setAttribute("id", newRate+"_day");
	tr.insertBefore(newTH_dagenTitle, th);

	for(i=0; i < flexArray.length; i++){
		//TD en TR ophalen
		td = document.getElementById('flexid'+flexArray[i]+'_rateTotal');
		var tr = td.parentNode;

		//nieuwe TD totaluren aanmaken
		var newTD_urenTotaal = document.createElement("td");
		newTD_urenTotaal.innerHTML="<input id='flexid"+flexArray[i]+"_rate"+ratecount+"_hour' type='text' maxlength='7' class='formtexttime' name='row["+flexArray[i]+"][0][1]["+newRate+"][0]' value='' onblur=\"if(checkTotalHours(this.value,"+round3minutes+", 'flexid"+flexArray[i]+"_rate"+ratecount+"_hour')){calcTotalTotal(&#39;"+flexArray[i]+"&#39;, ratecount, daycounter), resetDayHours(&#39;"+flexArray[i]+"&#39;,"+ratecount+", daycounter)}\">";
		newTD_urenTotaal.setAttribute("class", "newform_input");
		tr.insertBefore(newTD_urenTotaal, td);

		//nieuwe TD totaldagen aanmaken
		var newTD_dagenTotaal = document.createElement("td");
		newTD_dagenTotaal.innerHTML="<input id='flexid"+flexArray[i]+"_rate"+ratecount+"_day' type='text' maxlength='7' class='formtexttime' name='row["+flexArray[i]+"][0][1]["+newRate+"][1]' value='' onblur='if(checkTotalDays(this.value, daycounter)){calcTotalTotal(&#39;"+flexArray[i]+"&#39;, ratecount, daycounter), resetDayHours(&#39;"+flexArray[i]+"&#39;,"+ratecount+", daycounter)}'>";
		newTD_dagenTotaal.setAttribute("class", "newform_input");
		if (specialRatesArray.in_array(newRate) == false) {
			newTD_dagenTotaal.style.display="none";
		}
		tr.insertBefore(newTD_dagenTotaal, td);

		if (document.getElementById("flexid"+flexArray[i]+"_dag0") != null) {
			for(dag=0; dag < daycounter; dag++) {
				dagTemp=dag+1;

				//TR en TD ophalen
				td_dag = document.getElementById('flexid'+flexArray[i]+'_rateDay_dag'+dag);
				var tr_dag = td_dag.parentNode;

				//nieuwe TD urenPerDag aanmaken
				var newTD_urenPerDag = document.createElement("td");
				newTD_urenPerDag.innerHTML="<input type='text' maxlength='7' class='formtexttime' id='flexid"+flexArray[i]+"_rate"+ratecount+"_dag"+dag+"' name='row["+flexArray[i]+"][" + dagTemp+ "][1]["+newRate+"][0]' value='' onblur=\"if(checkTotalDay(this.value,"+round3minutes+", 'flexid"+flexArray[i]+"_rate"+ratecount+"_dag"+dag+"')){calcTotal(&#39;"+flexArray[i]+"&#39;, "+ratecount+", "+daycounter+");countDays(&#39;"+flexArray[i]+"&#39;, "+ratecount+", daycounter);calcTotalTotal(&#39;"+flexArray[i]+"&#39;, ratecount, daycounter)}\">";
				newTD_urenPerDag.setAttribute("class", "newform_input_week");
				tr_dag.insertBefore(newTD_urenPerDag, td_dag);

				//nieuwe TD dagenPerDag aanmaken
				var newTD_dagenPerDag = document.createElement("td");
				newTD_dagenPerDag.innerHTML="&nbsp;";
				newTD_dagenPerDag.setAttribute("class", "newform_input_week");
				if (specialRatesArray.in_array(newRate) == false) {
					newTD_dagenPerDag.style.display="none";
				}
				tr_dag.insertBefore(newTD_dagenPerDag, td_dag);
			}
		}
	}
	//Totaal aantal gebruikte urensoorten met 1 verhogen
	addedRates.push(newRate);
	ratecount++;
}

//Deze functie voegt een onkosten soort toen aan het urenbriefje
function addAllowance(flexArray, allowancecounter, daycounter) {
	//Prevent older browsers from getting any further.
	if(!document.getElementById) return;

	allowancecount = parseFloat(allowancecounter);

	//De regel hieronder zorgt ervoor dat -voeg onkosten toe- niet werk als toe te voegen onkosten
	elem = document.getElementById('newAllowance');
	if (elem.options[0].selected ==true) return;

	//Gekozen onkosten waarde uit selectbox halen
	allowanceId = document.add_multiple.newAllowance.options[document.add_multiple.newAllowance.selectedIndex].value;
	allowanceName = document.add_multiple.newAllowance.options[document.add_multiple.newAllowance.selectedIndex].id;
	allowanceName = allowanceName.substr(9); //id komt binnen met "allowance" voor het id geplakt.
	document.add_multiple.newAllowance.remove(document.add_multiple.newAllowance.selectedIndex);

	//nieuwe TH allowanceTitle aanmaken
	var newTH_allowanceTitle = document.createElement("th");
	newTH_allowanceTitle.innerHTML=allowanceName;
	//newTH_allowanceTitle.style.whiteSpace="nowrap";
	//newTH_allowanceTitle.style.color="green";
	newTH_allowanceTitle.style.paddingRight="10px";
	newTH_allowanceTitle.setAttribute("class", "newform_head");
	newTH_allowanceTitle.setAttribute("title", allowanceName);
	newTH_allowanceTitle.setAttribute("name", allowanceName);
	newTH_allowanceTitle.setAttribute("id", allowanceName);

	//TH allowanceTitle invoegen
	th = document.getElementById('generated_allowanceTitle');
	var tr = th.parentNode;
	tr.insertBefore(newTH_allowanceTitle, th);

	for(i=0; i < flexArray.length; i++){

		//nieuwe TD totalAllowance aanmaken
		var newTD_AllowanceTotaal = document.createElement("td");
		newTD_AllowanceTotaal.innerHTML="<input id='flexid"+flexArray[i]+"_allowance"+allowancecount+"' type='text' maxlength='7' class='formtexttime' name='row["+flexArray[i]+"][0][2]["+allowanceId+"][0]' value='' onblur='if(checkAllowance(this.value)){resetAllowance(&#39;"+flexArray[i]+"&#39;,"+allowancecount+", daycounter)}'>";
		newTD_AllowanceTotaal.setAttribute("class", "newform_input");

		td = document.getElementById('flexid'+flexArray[i]+'_allowanceTotal');
		var tr = td.parentNode;
		tr.insertBefore(newTD_AllowanceTotaal, td);

		if (document.getElementById("flexid"+flexArray[i]+"_dag0") != null) {
			for(dag=0; dag < daycounter; dag++) {
				dagTemp=dag+1;

				//nieuwe TD dagenPerDag aanmaken
				var newTD_allowancePerDag = document.createElement("td");
				newTD_allowancePerDag.innerHTML="<input type='text' maxlength='7' class='formtexttime' id='flexid"+flexArray[i]+"_allowance"+allowancecount+"_dag"+dag+"' name='row["+flexArray[i]+"][" + dagTemp+ "][2]["+allowanceId+"][0]' value='' onblur='if(checkAllowance(this.value)){calcTotalAllowance(&#39;"+flexArray[i]+"&#39;,"+allowancecount+", daycounter)}'>";
				newTD_allowancePerDag.setAttribute("class", "newform_input_week");

				td_dag = document.getElementById('flexid'+flexArray[i]+'_allowanceDay_dag'+dag);
				var tr_dag = td_dag.parentNode;
				tr_dag.insertBefore(newTD_allowancePerDag, td_dag);
			}
		}
	}
	//Totaal aantal gebruikte onkosten met 1 verhogen
	addedAllowances.push(allowanceId);
	allowancecount++;
}

//Deze functie telt per urensoort op hoeveel dagen van de week, in het uitgeklapte menu, ingevuld zijn
function countDays(resourceid, ratenumber, daycounter) {
	//Prevent older browsers from getting any further.
	if(!document.getElementById) return;
	var totaldays = 0;
	for (i=0;i<daycounter;i=i+1) {
		field = document.getElementById('flexid'+resourceid+'_rate'+ratenumber+'_dag'+i);
		value = field.value;
		if (value != '' && value != 0) {
			totaldays = totaldays + 1;
		}
	}
	id = 'flexid'+resourceid+'_rate'+ratenumber+'_day';
	field = document.getElementById(id);
	field.value = totaldays;
}

//Deze functie wordt in het nieuwe urenbriefje aangeroepen en berekend het totaal aantal uren van de dag
function calcDayTotal(day,hours, days) {
	var mon = days[0];
	var tue = days[1];
	var wed = days[2];
	var thu = days[3];
	var fri = days[4];
	var sat = days[5];
	var sun = days[6];
	var total = days[7];
	var theDay=0;
	if (day==0) {
		theDay = (mon*1) + (hours*1);
	} else if (day==1) {
		theDay = (tue*1) + (hours*1);
	} else if (day==2) {
		theDay = (wed*1) + (hours*1);
	} else if (day==3) {
		theDay = (thu*1) + (hours*1);
	} else if (day==4) {
		theDay = (fri*1) + (hours*1);
	} else if (day==5) {
		theDay = (sat*1) + (hours*1);
	} else if (day==6) {
		theDay = (sun*1) + (hours*1);
	}
	return true;
}


//Deze functie berekend het totaal gewerkte uren van een urensoort
function calcTotal(resourceid, ratenumber, daycounter) {
	//Prevent older browsers from getting any further.
	if(!document.getElementById) return;
	var totalhours = 0;
	for (i=0; i < daycounter; i=i+1) {
		field = document.getElementById('flexid'+resourceid+'_rate'+ratenumber+'_dag'+i);
		value = field.value;
		if (value != '') {
			splitArray = value.split(',');
			if (splitArray.length > 1) {
				value = splitArray[0] + '.' + splitArray[1];
			}
			hours = parseFloat(value);
			totalhours += hours;
		}
	}
	id = 'flexid'+resourceid+'_rate'+ratenumber+'_hour';
	field = document.getElementById(id);
	//2 cijfers achter de komma afronden
	totalhours = Math.round((totalhours)*100)/100;
	field.value = totalhours;
}

//Deze functie berekend het totaal gewerkte uren van een urensoort
//gegeven word het id van het totaal veld, de oude en nieuwe waarde van het veranderde veld;
function calcTotalMatrix(targetId, oldValue, newValue) {
	//Prevent older browsers from getting any further.
	if(!document.getElementById) return;
	totalField = document.getElementById(targetId);
	var totalhours = totalField.value;
	totalField.value = totalhours - oldValue + newValue;
}

//Deze functie berekend het totaal van het onkosten type kolom
function calcTotalAllowance(resourceid, allowancenumber, daycounter) {
	//Prevent older browsers from getting any further.
	if(!document.getElementById) return;
	var total = 0;
	for (i=0; i < daycounter; i=i+1) {
		field = document.getElementById('flexid'+resourceid+'_allowance'+allowancenumber+'_dag'+i);
		value = field.value;
		if (value != '') {
			splitArray = value.split(',');
			if (splitArray.length > 1) {
				value = splitArray[0] + '.' + splitArray[1];
			}
			temp = parseFloat(value);
			total += temp;
		}
	}
	id = 'flexid'+resourceid+'_allowance'+allowancenumber;
	field = document.getElementById(id);
	field.value = total;
}

//Deze functie berekend het totaal van de hele week of 4weken of maand
function calcTotalTotal(resourceid, ratecount, daycounter) {
	//Prevent older browsers from getting any further.
	if(!document.getElementById) return;
	var totalhours = 0;
	var totaldays = 0;
	var totaldays2 = 0;

	//totaal aantal gewerkte uren uitrekenen
	for (i=0; i < ratecount; i=i+1) {
		field_hour = document.getElementById('flexid'+resourceid+'_rate'+i+'_hour');
		hour_value = field_hour.value;
		
		var className = field_hour.className;
		
		//totaaluren optellen
		if (hour_value != '' && className.substring(0, 5) != 'bonus') {
			splitArray = hour_value.split(',');
			if (splitArray.length > 1) {
				hour_value = splitArray[0] + '.' + splitArray[1];
			}
			hour_count = parseFloat(hour_value);
			totalhours += hour_count;
		}
	}

	//totaal aantal dagen gewerkt uitrekenen van alle totaal waardes bovenin
	for (i=0; i < ratecount; i=i+1) {
		field_day = document.getElementById('flexid'+resourceid+'_rate'+i+'_day');
		day_value = field_day.value;
		if (day_value > totaldays) {
			totaldays = day_value;
		}
	}

	if (document.getElementById("flexid"+resourceid+"_dag0") != null) {
		//totaal aantal dagen gewerkt uitrekenen van alle dagen afzonderlijk
		for (i=0; i < daycounter; i=i+1) {
			counter = 0;
			for (j=0; j < ratecount; j=j+1) {
				temp = document.getElementById('flexid'+resourceid+'_rate'+j+'_dag'+i).value;
				if (temp != '' && temp != 0) {
					counter = 1;
				}
			}
			if (counter == 1) {
				totaldays2 = totaldays2 + 1;
			}
		}
	}

	//verschil kolom invullen
	contractHours = document.getElementById('flexid'+resourceid+'_contractHours');
	contractHours_value = contractHours.value;
	document.getElementById('flexid'+resourceid+'_verschil').value = totalhours - contractHours_value;

	id = 'flexid'+resourceid+'_totalHours';
	field = document.getElementById(id);
	field.value = totalhours;

	id = 'flexid'+resourceid+'_totalDays';
	field = document.getElementById(id);
	if (totaldays > totaldays2) {
		field.value = totaldays;
	} else {
		field.value = totaldays2;
	}
}

//update matrix fields
function updateMatrix(element, oldValue) {
	newValue=roundDurationInQuarters(element.value);

	if (isNaN(newValue)) {
		element.value = oldValue;
		alert('Ongeldige invoer');
	} else {
		if (newValue=='0')	element.value == '';
		else				element.value = newValue;

		if (true) {
			calcTotalMatrix('totalhours', oldValue, newValue);
		}
		document.getElementById('timedif').value =
			document.getElementById('totalhours').value - document.getElementById('contacthours').value;
	}
}

// calculate matrix total values
function calculateRowTotalMatrix(inputElement, totalId) {
//	inputElement.onblur = null; // Prevent alert loops during debugging
	var rowTotalElement = document.getElementById(totalId);

	var rateIdExpr = /^postedtimecard\[[0-9]+\]\[([^\]]+)\]$/;
	var rateId = inputElement.getAttribute('name').replace(rateIdExpr, "$1");

	var columnTotalElement = document.getElementById('total_' + rateId);
		
	var rowElement = getParentOfName(inputElement, 'tr');
	var rowInputElements = rowElement.getElementsByTagName('input');
	var rowTotal = 0.0;
	var columnTotal = 0.0;

	var element;
	var column;

	// calculate row total
	for (var i = 0; i < rowInputElements.length -1; i++) { // skip row totals column
		element = rowInputElements[i];

		if (element.getAttribute("type") != "text")
			continue;

		rowTotal += Number(element.value);

		var elementRateId = element.getAttribute("name").replace(rateIdExpr, "$1");
		if (elementRateId == rateId) {
			column = i;
		}
	}
	
	rowTotalElement.value = String(rowTotal);

	// calculate column total
	var rowElements = getParentOfName(rowElement, 'table').getElementsByTagName('tr');
	for (var i = 0; i < rowElements.length -1; i++) { // skip column totals row
	
		rowInputElements = rowElements[i].getElementsByTagName('input');

		if (column >= rowInputElements.length)
			continue;

		element = rowInputElements[column];
		if(element.disabled == true) continue;
		columnTotal += Number(element.value);
	}
	
	columnTotalElement.value = String(columnTotal);
}

//Deze functie krijgt een tijd binnen en of deze valid is of niet.
function validTime(time,match, round3minutes, field) {
	if (time && !match) {
		alert("U heeft een ongeldige totaaltijd ingevoerd, de totaaltijd moet als decimaal getal ingevoerd worden. Voorbeeld: 3:30 uur moet als 3,5 uur ingevoerd worden. U mag maximaal 2 cijfers achter de komma gebruiken.");
	} else {
		//Afronden voor persoonality in eenheden van 0.05
		if(round3minutes == 1) {
			//komma vervangen door een punt als deze erin zit.
			time = time.replace(",",".");
			var rounded = Math.round(time*100);
			rounded = rounded * 0.2;
			rounded = Math.round(rounded);
			rounded = rounded / 0.2;
			rounded = rounded / 100;
			document.getElementById(field).value = rounded;
		}
	}
}

//Check of het total aantal uren (bovenste invoerveld) formaat correct gebruikt is.
function checkTotalHours(time, round3minutes, field) {
	var match = /^\d+[.,]?(\d|\d\d)?$/.test(time);
	validTime(time, match, round3minutes, field);
	return match;
}

//Check of de tijd ingevuld voor 1 dag ook juist ingevoerd is.
function checkTotalDay(time, round3minutes, field) {
	var match = /^((24)|(([01]?\d|20|21|22|23)([.,](\d|\d\d))?)?)$/.test(time);
	validTime(time, match, round3minutes, field);
	return match;
}

//Check of het total aantal dagen (bovenste invoerveld) formaat correct gebruikt is.
function checkTotalDays(time, daycounter) {
	if (daycounter == 7) {
		var match = /^[0-7]$/.test(time);
	} else if (daycounter == 28) {
		var match = /(^([1-9]){1}$|^([1]{1}[0-9]{1}$)|^([2]{1}[0-8]{1}$))/.test(time);
	} else if (daycounter == 31) {
		var match = /(^([1-9]){1}$|^([1-2]{1}[0-9]{1}$)|^([3]{1}[0-1]{1}$))/.test(time);
	}
	if (time && !match) {
		alert("U heeft een ongeldig aantal totaal dagen ingevoerd. Totaal dagen moeten als heel getal worden ingevoerd en mogen niet meer zijn dan het aantal dagen van de periode.");
	}
	return match;
}

//Check of de onkosten juist ingevoerd zijn.
function checkAllowance(time) {
	var match = /^\d+[.,]?(\d|\d\d)?$/.test(time);
	if (time && !match) {
		alert("U heeft een ongeldige waarde ingevoerd.");
	}
	return match;
}


/**
 * Get the absolute position and the dimensions of obj
 * @param object obj html object to find the position from
 * @return array [x,y,width,height]
 */
function findPos(obj) {
	var width = height = curleft = curtop = 0;
	width = obj.offsetWidth;
	height = obj.offsetHeight;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop,width,height];
}

function reposition(header) {
	var tabel = document.getElementById('theTable');
	var headerObj = document.getElementById(header);
	var headerHeight = headerObj.clientHeight;

	tabel.style.marginTop =  headerHeight+'px';

	if (navigator.appName == "Microsoft Internet Explorer") {
		coords = findPos(headerObj.parentNode.parentNode.parentNode);
		headerObj.style.top = (coords[1]-headerHeight) +"px";
	} else {
		coords = findPos(headerObj.parentNode);
		headerObj.style.top = coords[1]+"px";
		headerObj.style.top = (coords[1]-headerHeight) +"px";
		// Firefox resizes the row with position:absolute to a smaller size
		// Setting the row width doesn't scale the th's proportionally either
		// Hence all this trouble...
		headerObj.style.width = coords[2] + "px";

		var nextRow = document.getElementById('first-row');
		var th = headerObj.firstChild;
		var td = nextRow.firstChild;
		var cellStyle;
		var d = 0;
		do {
			while (th != null &&
				(th.nodeType != Node.ELEMENT_NODE || th.nodeName != "TH")) {

				th = th.nextSibling;
			}

			while (td != null &&
				(td.nodeType != Node.ELEMENT_NODE || td.nodeName != "TD")) {
				td = td.nextSibling;
			}

			d++;
			if (td != null) {
				cellStyle = document.defaultView.getComputedStyle(td, null);

				th.style.width = cellStyle.getPropertyValue('width');
			}

			if (td != null) td = td.nextSibling;
			if (th != null) th = th.nextSibling;
		} while (td != null && th != null);
	}
}

// END GEGROEPEERDE URENBRIEFJES FUNCTIONS ***************************************

function removeFromMatrix(){
	var authorisationroles = getSelected("authorisationroles");
	var orgUnits = getSelected("authorisationunits");
	for(i=0 ; i<authorisationroles.length; i++){
		for(j=0;j<orgUnits.length;j++){
			document.getElementById('autorisationMatrix_'+orgUnits[j]+'_'+ authorisationroles[i]).checked=false;
		}
	}
}
function addToMatrix(){
	var authorisationroles = getSelected("authorisationroles");
	var orgUnits = getSelected("authorisationunits");
	for(i=0 ; i<authorisationroles.length; i++){
		for(j=0;j<orgUnits.length;j++){
			document.getElementById('autorisationMatrix_'+orgUnits[j]+'_'+ authorisationroles[i]).checked=true;
		}
	}
}

//retouneerd een array met alle geselecteerde values
function getSelected(SelectboxId){
	 var selectedArray = new Array();
	 var selObj = document.getElementById(SelectboxId);
	 var i;
	 var count = 0;
	 for (i=0; i<selObj.options.length; i++) {
		if (selObj.options[i].selected) {
			selectedArray[count] = selObj.options[i].value;
			count++;
		}
	 }
	 return selectedArray;
}

function EnableDisableStartdate(field) {
	target_field = document.getElementById(field);
	if (target_field.value == "") {
		document.getElementById("startDate").disabled = false;
		document.getElementById("endDate").disabled = false;
		try { document.getElementById("timecardtype").disabled = false; } catch(e){}
	} else {
		document.getElementById("startDate").disabled = true;
		document.getElementById("endDate").disabled = true;
		try { document.getElementById("timecardtype").disabled = trues; } catch(e){}
	}
}


var splitIndex = 0;
var splitArray = new Array();

// Splits string at text
function splits(string,text) {
	var strLength = string.length, txtLength = text.length;
	if ((strLength == 0) || (txtLength == 0)) return;

	var i = string.indexOf(text);
	if ((!i) && (text != string.substring(0,txtLength))) return;
	if (i == -1) {
		splitArray[splitIndex++] = string;
		return;
	}

	splitArray[splitIndex++] = string.substring(0,i);

	if (i+txtLength < strLength)
		splits(string.substring(i+txtLength,strLength),text);

	return;
}

// Splits string and sets index
function split(string,text) {
	splitArray = string.split(text);
	splitIndex = splitArray.length;
}

//Checks if the correct time format is used
function checkTime(time) {
	var match = /^((24[:.]00)|(([01]?\d|20|21|22|23)[:.][012345]\d)?)$/.test(time);
	if (!match) {
		alert('U heeft een ongeldige tijd ingevoerd, tijd moet als uu:mm of als uu.mm worden ingevoerd.');
	}

	return match;
}

//Check of het total aantal uren formaat correct gebruikt is.
function checkTotalTime(time) {
	var match = /^((24[.,]00)|(([01]?\d|20|21|22|23)([.,](\d|\d\d))?)?)$/.test(time);
	if (!match) {
		alert("U heeft een ongeldige totaaltijd ingevoerd, de totaaltijd moet als decimaal getal ingevoerd worden. Voorbeeld: 3:30 uur moet als 3,5 uur ingevoerd worden. U mag maximaal 2 cijfers achter de komma gebruiken.");
	}
	return match;
}

function calculateTotal(fieldname, nr, day, fromTotal) {
	//Prevent older browsers from getting any further.
	if(!document.getElementById) return;
	var total = 0;
	for (i=0; i < 7; i=i+1) {
		// Set the id
		id = fieldname + nr + i;
		// Get the value of the field with the id
		if (field = document.getElementById(id)) {
			value = field.value

			// If the value != '' then convert to float and add to total
			if (value != '') {

				// If the value contains a ',' then substitute it for a '.'
				splitArray = value.split(',');
				if (splitArray.length > 1) {
					value = splitArray[0] + '.' + splitArray[1];
				}

				hours = parseFloat(value);
				total += hours;
			}
		}
	}


	// Set the total field of the row to the total amount
	id = fieldname + 'Total' + nr;
	field = document.getElementById(id);
	field.value = total;

	//als er geen tijden geschreven zijn dan het totaal van de dag berekenen als de onblur vanuit een totaal (van die dag van een urensoort) komt.
	if(fromTotal) {
		var startA = document.getElementById('startTimeA' + day).value;
		var startB = document.getElementById('startTimeB' + day).value;
		var endA = document.getElementById('endTimeA' + day).value;
		var endB = document.getElementById('endTimeB' + day).value;
		if(startA == "" && startB == "" && endA == "" && endB == "") {
			//totalen van de dag optellen.
			var total = 0;
			for(i=0;i < 9;i=i+1) {
				id = "rateHours" + i + day
				if (field = document.getElementById(id)) {
					value = field.value
					//If the value != '' then convert to float and add to total
					if (value != '') {
						//If the value contains a ',' then substitute it for a '.'
						splitArray = value.split(',');
						if (splitArray.length > 1) {
							value = splitArray[0] + '.' + splitArray[1];
						}
						hours = parseFloat(value);
						total += hours;
					}
				}
			}
		id = 'total' + day;
		field = document.getElementById(id);
		field.value = total;
		}
	}
}

// Calculate time in seconds from string input
function calculateSeconds(field, minimum) {
	var splitArray = field.value.split(/[:.,]/);
	var splitIndex = splitArray.length;

	for (var i = splitIndex-1, j = 60, seconds = 0; i >= 0; i--, j*=60)
		seconds += splitArray[i] * j;

	if (seconds > 0 && seconds < minimum && seconds < 86400)
	{
		// Assume user entered time in 12hr pm format
		guess = seconds + 12*3600;

		if (guess > minimum && guess < 86400) {
			seconds = guess;

			field.value = formatTime(
				String(Math.floor(seconds / 3600)),
				String(Math.floor((seconds % 3600) / 60)));
		}
	}

	return seconds;
}

//Calculates the total time between 2 start and endtimes
function calculateTime(currentElement, rounded, round3minutes) {
	//Prevent older browsers from getting any further.
	if (!document.getElementById) return;

	var field = document.getElementById('startTime');
	var startTimeField = field;
	var fault = null;

	var startTime = calculateSeconds(field, 0);

	field = document.getElementById('endTime');
	var endTimeField = field;
	var endTime = calculateSeconds(field, startTime);

	field = document.getElementById('break');
	var breakField = field;
	var breakTime = calculateSeconds(field, 0);

	difference = endTime - startTime;
	if (difference >= 0) {
		total = difference/3600;
		field = document.getElementById('total');

		if (rounded == 1) {
			field.value = roundDurationInQuarters(total);
		} else {
			var total=Math.round(total*100)/100;
			field.value = total;
		}
	} else if (currentElement == endTimeField) {
		alert('De eindtijd ligt voor de begintijd');
		fault = endTimeField;
	}

	difference = difference - breakTime;
	if (difference >= 0) {
		worked = difference/3600;
		field = document.getElementById('worked');
		if(rounded == 1) {
			field.value = roundDurationInQuarters(worked);
		} else {
			var worked=Math.round(worked*100);
			//Afronden voor persoonality in eenheden van 0.05
			if(round3minutes == 1) {
				worked = worked * 0.2;
				worked = Math.round(worked);
				worked = worked / 0.2;
			}
			worked = worked/100;
			field.value = worked;
		}

		var wkTotal = document.getElementById('wkTotal');
		var weekTotal = document.getElementById('weekTotal');
		var editLine = document.getElementById('editLine');

		if(editLine.value == 0) {
			if(rounded == 1) {
				weekTotal.value = roundDurationInQuarters(worked) + Number(wkTotal.value);
			} else {
				var totalrounded = Math.round((worked + Number(wkTotal.value))*100)/100;
				weekTotal.value = totalrounded;
			}
		}
	 } else if (breakTime > 0) {
	 	alert('De pauze is langer dan de gewerkte tijd.');
		fault = breakField;
	 }

	 return fault;
}

//Calculates the total time between 2 start and endtimes
function calculateTime_old(nr) {
	//Prevent older browsers from getting any further.
	if (!document.getElementById) return;

	var id = 'startTimeA' + nr;
	var field = document.getElementById(id);
	var startTimeA = calculateSeconds(field, 0);

	id = 'endTimeA' + nr;
	field = document.getElementById(id);
	var endTimeA = calculateSeconds(field, startTimeA);
	if (field.value != '' && endTimeA < startTimeA) {
		alert('De eindtijd ligt voor de begintijd');
		return field;
	}

	id = 'startTimeB' + nr;
	field = document.getElementById(id);
	var startTimeB = calculateSeconds(field, endTimeA);

	id = 'endTimeB' + nr;
	field = document.getElementById(id);
	var minimum = max(startTimeB, startTimeA);
	var endTimeB = calculateSeconds(field, minimum);
	if (field.value != '' && endTimeB < minimum) {
		alert('De eindtijd ligt voor de begintijd');
		return field;
	}

	difference = endTimeA - startTimeA + endTimeB - startTimeB;
	if (difference >= 0) {
		total = roundTimeValueInQuarters(difference/3600);

		id = 'total' + nr;
		field = document.getElementById(id);
		field.value = total;
	}

	// element causing error; not used yet
	return null;
}

function roundTotal(total, nr) {
		total = roundTimeStringInQuarters(total);

		id = 'total' + nr;
		field = document.getElementById(id);
		field.value = total;
}

//(un)checks all checkboxes in a form if the checkfield is (un)checked
function checkAll(form, checkfield) {
	count = form.elements.length;

	if(checkfield.checked == 1) {
		for (i=1; i < count; i++) {
			form.elements[i].checked = 1;
		}
	} else {
		for (i=1; i < count; i++) {
			form.elements[i].checked = 0;
		}
	}
}

/**
 * parse a time in different formats and convert it to the standard hh:mm format
 * @param string time
 * @param bool hourMode if a time between 1 and 24 should be interpreted as hours or minutes; true => hours, false => minutes
 * @return string time
 */
function parseTime(time, hourMode) {
	var len = time.length;
	var hours = '0';
	var mins = '0';

	time = time.replace(/[\.,;]/, ':');

	if (time.indexOf(':') == -1) {
		if (len <= 2) {
			if (hourMode && parseInt(time) > 0 && parseInt(time) <= 24) {
				hours = time;
			} else {
				mins = time;
			}
		} else if (len == 3) {
			hours = time.substring(0, 1);
			mins = time.substring(1, 3);
		} else if (len == 4) {
			hours = time.substring(0, 2);
			mins = time.substring(2, 4);
		} else if (len > 4) {
			alert('U heeft een ongeldige tijd ingevoerd, tijd moet als uu:mm of als uu.mm worden ingevoerd.');
			return null;
		}
	} else {
		var timeArray = time.split(':');
		hours = timeArray[0];
		mins = timeArray[1];
	}

	return formatTime(hours, mins);
}

function parseDate(element) {
	var datum = element.value;
	var day, mon, year;

	if (datum == undefined || datum.trim() == '') return '';

	var dateArray = dateToArray(datum);
	day		= dateArray[0];
	mon		= dateArray[1];
	year	= dateArray[2];

	if (checkDate(day, mon, year)) {
		element.value = formatDate(day, mon, year);
		return true;
	}

	alert('U heeft een ongeldige datum ingevoerd.');

	return false;
}

function dateToArray(datum) {
	var dateArray;	// [day, month, year]
	var now = new Date();

	datum = datum.replace(/[\.\/]/g, '-');

	if (datum.indexOf('-') == -1) {
		if (datum.length < 5 || datum.length > 8) {
			alert('U heeft een ongeldige datum ingevoerd.');
			return datum;
		} else {
			dateArray = new Array();

			var offset = 0, len = 2 - datum.length % 2;
			dateArray[0] = datum.substring(offset, len);

			offset += len;
			dateArray[1] = datum.substr(offset, 2);

			offset += 2;
			dateArray[2] = datum.substr(offset);
		}
	} else {
		var dateArray = datum.split('-');
	}

	// Handle years that don't specify century
	if (String(dateArray[2]).length < 4) {
		var century = Number(String(now.getFullYear()).substring(2));

		if (dateArray[2] <= century +1)
			dateArray[2] = String(2000 + Number(dateArray[2]));
		else
			dateArray[2] = String(1900 + Number(dateArray[2]));
	}

	return dateArray;
}

function checkDate(day, month, year) {
	var date;

	try {
		date = new Date(year, month -1, day);

		// Date is too smart; ie. month 13 becomes January next year
		if (Number(day) == date.getDate() &&
				Number(month) == (date.getMonth() +1) &&
				Number(year) == date.getFullYear())
			return true;
	} catch(e) {}

	return false;
}

function formatNumber(num, leadIn, size) {
	if (num.length < size) {
		return formatNumber(
			String(leadIn) + String(num),
			leadIn,
			size);
	}

	return num;
}

function formatTime(hours, minutes) {
	var hr = formatNumber(hours, '0', 2);
	var mn = formatNumber(minutes, '0', 2);

	return hr + ':' + mn;
}

function formatDate(day, mon, year) {
	var d = formatNumber(day, '0', 2);
	var m = formatNumber(mon, '0', 2);
	var y = String(year);

	return d + '-' + m + '-' + y;
}


function roundTimeInQuarters(element) {
	time = element.value;

	// Round the numbers to :00 / :15 / :30 / :45
	splitArray = time.split(/[:.,]/);
	splitIndex = splitArray.length;

	// Waarschijnlijk voor fixen van probleem van 08:30 die naar 0:30 wordt geset
	//if (splitArray[0].length == 2 && splitArray[0].charAt(0) == '0') {
	//	hours = parseInt(splitArray[0].slice(1));
	//} else {
	//	hours = parseInt(splitArray[0]);
	//}
	hours = parseInt(splitArray[0],10);
	minutes = parseInt(splitArray[1], 10);

	if (minutes > 52) {
		time = hours + 1 + ':00';
	} else if (minutes > 37) {
		time = hours + ':45';
	} else if (minutes > 22) {
		time = hours + ':30';
	} else if (minutes > 7) {
		time = hours + ':15';
	} else {
		time = hours + ':00';
	}

	element.value = time;
}

// Round the numbers to .00 / .25 / .50 / .75
function roundTimeValueInQuarters(time) {
	mod = time % 1;
	div = time - mod;

	if (mod > 0.875) {
		time = div + 1;
	} else if (mod > 0.625) {
		time = div + 0.75;
	} else if (mod > 0.375) {
		time = div + 0.50;
	} else if (mod > 0.125) {
		time = div + 0.25;
	} else {
		time = div;
	}
	return time;

}

// Round the numbers to .00 / .25 / .50 / .75
function roundTimeStringInQuarters(timeStr) {
	return roundTimeValueInQuarters(
		String(timeStr).replace(/,/, ".")
	);
}

function roundDurationInQuarters(duration) {
	return roundTimeStringInQuarters(duration)
}

// Compare date in thisElement to date specified in field with id dateField
function dateIsAfter(thisElement, dateField) {
	var startDate	= document.getElementById(dateField).value;
	var endDate		= thisElement.value;

	if (startDate == undefined || startDate.trim() == '' ||
			endDate == undefined || endDate.trim() == '')
		return true;

	var startArray	= dateToArray(startDate);
	var endArray	= dateToArray(endDate);

	var start	= new Date(startArray[2], startArray[1] -1, startArray[0]);
	var end		= new Date(endArray[2], endArray[1] -1, endArray[0]);

	if (start <= end)
		return true;

	alert('Einddatum ligt voor begindatum.');
	return false;
}

// Generalisation of onblur time parsing
function simpleParseTime(element, round, round3m) {
	var faultField = null;

	if (element.value == '')
		return true;

	element.value = parseTime(element.value, 1);
	if (!checkTime(element.value)) {
		element.value = '00:00';
		faultField = element;
	} else {
		if (round == true) {
			roundTimeInQuarters(element);
		}
		faultField = calculateTime(element, round, round3m);
	}

	if (faultField != null) {
		faultField.select();
		return false;
	}

	return true;
}

function simpleParseTime_old(element, nr) {
	var faultField = null;

	if (element.value == '')
		return true;

	var value = parseTime(element.value, 1);
	if (value == null) {
		faultField = element;
	} else {
		element.value = value;

		if (!checkTime(element.value)) {
			element.value = '00:00';
			faultField = element;
		} else {
			faultField = calculateTime_old(nr);
			calculateTotal('total', '');
		}
	}

	if (faultField != null) {
		faultField.select();
		return false;
	}

	return true;
}

function simpleTotalTime_old(element, nr) {
	if (checkTotalTime(element.value)) {
		var startTimeA	= document.getElementById('startTimeA' + nr);
		var endTimeA	= document.getElementById('endTimeA' + nr);

		if (startTimeA.value != '' && endTimeA.value != '') {
			calculateTime_old(element, nr);
		} else {
			roundTotal(element.value, nr);
		};

		calculateTotal('total', '');

		return true;
	}

	return false;
}

//Autocomplete from a select box
function autoComplete (field, select, property, forcematch) {
	var found = false;
	for (var i = 0; i < select.options.length; i++) {
	if (select.options[i][property].toUpperCase().indexOf(field.value.toUpperCase()) == 0) {
		found=true; break;
		}
	}
	if (found) { select.selectedIndex = i; }
	else { select.selectedIndex = -1; }
	if (field.createTextRange) {
		if (forcematch && !found) {
			field.value=field.value.substring(0,field.value.length-1);
			return;
		}
		var cursorKeys ="8;46;37;38;39;40;33;34;35;36;45;";
		if (cursorKeys.indexOf(event.keyCode+";") == -1) {
			var r1 = field.createTextRange();
			var oldValue = r1.text;
			var newValue = found ? select.options[i][property] : oldValue;
			if (newValue != field.value) {
				field.value = newValue;
				var rNew = field.createTextRange();
				rNew.moveStart('character', oldValue.length) ;
				rNew.select();
			}
		}
	}
}

// Add more fields dynamically.
// inputOffset is het aantal input velden voor de 'field' inputvelden.
// area2 => tweede area met 'field' velden waar rekening mee moet worden gehouden voor de nummering
// inputOffset2 is het aantal input velden voor de 'field' inputvelden voor de tweede area.
function addField(area, field, limit, inputOffset, area2, inputOffset2) {
	//Prevent older browsers from getting any further.
	if (!document.getElementById) return;

	var field_area = document.getElementById(area);

	//Get all the input fields in the given area.
	var all_inputs = field_area.getElementsByTagName("input");

	//Find the count of the last element of the list. It will be in the format '<field><number>'. If the
	//		field given in the argument is 'friend_' the last id will be 'friend_4'.
	var last_item = all_inputs.length - 1;
	if (area2 != undefined){
		var field_area2 = document.getElementById(area2);
		var all_inputs2 = field_area2.getElementsByTagName("input");
		var last_item2 = all_inputs2.length - 1;
	}
	
	if (last_item == inputOffset -1 &&
		(last_item2 == undefined || last_item2 == inputOffset2 -1)) {
		var count = 1;
	} else {
		if (last_item > inputOffset -1) {
			var last = all_inputs[last_item].id;
			var count = Number(last.split("_")[2]) + 1;
		}

		if (last_item2 > inputOffset2 -1) {
			var last2 = all_inputs2[last_item2].id;
			var count2 = Number(last2.split("_")[2]) + 1;
		}

		if (count == undefined && count2 != undefined) count = count2;
		if (count == undefined && count2 == undefined) count = 1;
		if (count != undefined && count2 > count) count = count2;
	}

	//If the maximum number of elements have been reached, exit the function.
	//		If the given limit is lower than 0, infinite number of fields can be created.
	if (count > limit && limit > 0) return;

	var newDiv = document.createElement("div");

	if (area != "staffingCustomer" && area != "reservation") {

		// Get the start and endDate
		var startDate	= document.getElementById('startDate');
		var endDate		= document.getElementById('endDate');
		var baseRate	= document.getElementById('baseRate');

		if (!startDate || !endDate || !baseRate)
			return;
	}
 	switch (area) {

	case "staffingCustomer":

		newDiv.innerHTML +=
			'<table class="noborder">' +
				'<tr>' +
					'<td class="formhead">Afdeling Id</td>' +
					'<td><input type="text" class="formtext" ' +
						'name="' + (field) + "Id_" + (count) + '"/>*</td>' +
					'<td class="formhead">Afdelingnaam</td>' +
					'<td><input type="text" class="formtext"' +
						' id="' + (field) + 'Name_' + (count) +
						'" name="'+ (field) + "Name_" + (count) +
						'"/>*</td>' +
				'</tr>' +
			'</table>';
		break;

	case "allowance":

		var html = "";
		html +=
		//newDiv.innerHTML +=
			'<table class="noborder">' +
				'<tr>' +
					'<td width="75">' +
						'<input type="hidden" ' +
							'id="' + (field) + 'IsAllowance_' + (count) + '" ' +
							'name="' + (field) + 'IsAllowance_' + (count) + '" ' +
							'value="1"/>' +
						'<input type="hidden" ' +
							'name="' + (field) + 'Id_' + (count) + '" ' +
							'value="' + (count) + '"/>' +
						'<input type="text" class="formtextmiddle" ' +
							'name="' + (field) + 'Class_' + (count) + '"' +
						'/>*</td>' +
					'<td width="85">' +
						'<input type="text" class="formtextmiddle" ' +
							'name="' + (field) + 'Description_' + (count) + '"/>' +
					'</td>' +
					'<td width="80">' +
						inputDate(
							field + 'StartDate_' + count,
							startDate.value,
							null,
							'formtextmiddle',
							null
						) +
					'*</td>' +
					'<td width="80">' +
						inputDate(
							field + 'EndDate_' + count,
							endDate.value,
							field + 'StartDate_' + count,
							'formtextmiddle',
							null
						) +
						'*</td>' +
										'</tr>' +
			'</table>';
			newDiv.innerHTML += html;
		break;

	case "rate":
		newDiv.innerHTML +=
			'<table class="noborder">' +
				'<tr>' +
					'<td width="75">' +
						'<input type="hidden" ' +
							'name="' + (field) + 'Id_' + (count) + '" ' +
							'value="' + (count) + '"/>' +
						'<input type="text" class="formtextmiddle" ' +
							'name="' + (field) + 'Class_' + (count) + '"' +
						'/>*</td>' +
					'<td width="85">' +
						'<input type="text" class="formtextmiddle" ' +
							'name="' + (field) + 'Description_' + (count) + '"' +
						'/></td>' +
					'<td width="75">' +
						'<input type="text" class="formtextsmall" ' +
							'name="' + (field) + 'Multiplier_' + (count) + '"' +
						'/>%*</td>' +
					'<td width="70">' +
						inputDate(
							field + 'StartDate_' + count,
							startDate.value,
							null,
							'formtextmiddle',
							null
						) +
						'*</td>' +
					'<td width="70">' +
						inputDate(
							field + 'EndDate_' + count,
							endDate.value,
							field + 'StartDate_' + count,
							'formtextmiddle',
							null
						) +
						'*</td>' +
										'<td width="45">' +
						'<input onblur="this.value = this.value.replace(\',\',\'.\');" type="text" class="formtextsmall" ' +
							'id="' + (field)+ 'Amount_' + (count) + '" ' +
							'name="' + (field) + 'Amount_' + (count) + '" ' +
							'value="' + (baseRate.value) + '"' +
						'/>*</td>' +
				'</tr>' +
			'</table>';
		break;

	case "reservation":
		var reservationOptions = getElementsByClassName('reservationOptions');
		var selectOptions = "";
		for(i=0;i<reservationOptions.length;i++)
		{
			var values = reservationOptions[i].value.split("___");
			selectOptions += '<option value ="'+values[0]+'">'+values[1]+'</option>'
		}
		newDiv.innerHTML +=
			'<table class="noborder">' +
				'<tr>' +
					'<td width="200px"><select ' +
						'id="' + (field)+ 'ReservationId_' + (count) + '" ' +
						'name="' + (field) + 'ReservationId_' + (count) + '" ' +
						'>'+selectOptions+'</select>'+
					'</td>' +
					'<td width="100px">' +
						'<input type="text" class="formtextsmall" ' +
							'id="' + (field)+ 'Balance_' + (count) + '" ' +
							'name="' + (field) + 'Balance_' + (count) + '" ' +
							'value=""' +
						'/></td>' +
					'<td></td>' +
				'</tr>' +
			'</table>';
		break;
	}

//	alert(newDiv.innerHTML);
	field_area.appendChild(newDiv);
}

// Set the value of a hidden form element
function setHidden(element, waarde)
{
	element = document.getElementById(element);
	if (!(element)) return false;
	element.value = waarde;
	return true;
}

function createEvents()
{
	// Hover highlights for TR elements
	nodes = document.getElementsByTagName("tr");
	for (var i=0; i<nodes.length; i++) {
		node = nodes[i];
		if(node.className == "even") {
			node.onmouseover=function(){this.className="hoverover";};
			node.onmouseout=function(){this.className="even";};
		} else if(node.className == "odd") {
			node.onmouseover=function(){this.className="hoverover";};
			node.onmouseout=function(){this.className="odd";};
		}
	}

	// Autofocus on login field
	nodes = document.getElementsByTagName("input");
	for (var i=0; i<nodes.length; i++) {
		node = nodes[i];

		if ((node.name == "login") && (node.type != 'hidden')) {
			node.focus();
		}
	}

	return true;
}

function addOnkosten(selectElem){
	teller = getNumberOfAllowances();
	if (teller==1 || checkIfFilledOnkostenDiv(document.getElementById('onk_nr'+(teller-1)))){
		onkostenDiv = document.getElementById('onkosten');
		newDiv = document.getElementById("onk_nr"+teller).cloneNode(true);
		newDiv.id="onk_nr"+(teller+1);
		clearOnkostenDiv(newDiv);
		disableOnkostenDiv(newDiv,true)
		onkostenDiv.appendChild(newDiv);
		teller +=1;
	}
	//setUnity(selectElem.parentNode, selectElem.options[selectElem.selectedIndex].title);
}

function clearOnkostenDiv(div){
	for(i=0;i< div.childNodes.length;i++){
		if (div.childNodes[i].name){div.childNodes[i].value="";}
	}
}

function checkIfFilledOnkostenDiv(div){
	for(i=0;i< div.childNodes.length;i++){
		if (div.childNodes[i].name && div.childNodes[i].value=="") return false;
	}
	return true;
}

function disableOnkostenDiv(div,trueOrFalse){
	for(i=0;i< div.childNodes.length;i++){
		if (div.childNodes[i].name){
			if (trueOrFalse == true) div.childNodes[i].disabled=true;
			else div.childNodes[i].disabled=false;
		}
	}
}

function getNumberOfAllowances(){
	return document.getElementById('onkosten').getElementsByTagName('div').length;
}

//begin onkosten selecteren per SC
function addOnkosten_sc(selectElem, exclude){
	teller = getNumberOfAllowances_sc(exclude);
	if (teller>0){
		if(exclude == 1) {
			onkostenDiv = document.getElementById('excludedAllowance');
			newDiv = document.getElementById("excludedAllowance_nr"+teller).cloneNode(true);
			newDiv.id="excludedAllowance_nr"+(teller+1);
			onkostenDiv.appendChild(newDiv);
			teller +=1;
		} else {
			onkostenDiv = document.getElementById('allowance');
			newDiv = document.getElementById("allowance_nr"+teller).cloneNode(true);
			newDiv.id="allowance_nr"+(teller+1);
			onkostenDiv.appendChild(newDiv);
			teller +=1;
		}
	}
}

function getNumberOfAllowances_sc(exclude){
	if(exclude == 1) {
		return document.getElementById('excludedAllowance').getElementsByTagName('div').length;
	} else {
		return document.getElementById('allowance').getElementsByTagName('div').length;
	}
}
//end onkosten selecteren per SC


//begin extrarate selecteren per SC
function addExtrarate_sc(selectElem, exclude){
	teller = getNumberOfExtrarates_sc(exclude);
	if (teller>0){
		if(exclude == 1) {
			extrarateDiv = document.getElementById('excludedExtrarate');
			newDiv = document.getElementById("excludedExtrarate_nr"+teller).cloneNode(true);
			newDiv.id="excludedExtrarate_nr"+(teller+1);
			extrarateDiv.appendChild(newDiv);
			teller +=1;
		} else {
			extrarateDiv = document.getElementById('extrarate');
			newDiv = document.getElementById("extrarate_nr"+teller).cloneNode(true);
			newDiv.id="extrarate_nr"+(teller+1);
			extrarateDiv.appendChild(newDiv);
			teller +=1;
		}
	}
}

function getNumberOfExtrarates_sc(exclude){
	if(exclude == 1) {
		return document.getElementById('excludedExtrarate').getElementsByTagName('div').length;
	} else {
		return document.getElementById('extrarate').getElementsByTagName('div').length;
	}
}
//end extrarate selecteren per SC



function setUnity(div, value){
	for(i=0;i< div.childNodes.length;i++){
		if (div.childNodes[i].nodeName == 'SPAN'){
			div.childNodes[i].innerHTML = value;
		}
	}
}

function check_freelance_time(id){
	value = document.getElementById(id).value;
	if (value != '') {
		splitArray = value.split(',');
		if (splitArray.length > 1) {
			//Er is iets ingevoerd zoals b.v 14,4
			value = splitArray[0] + '.' + splitArray[1].substr(0,2);
		} else {
			splitArray = value.split('.');
				if (splitArray.length > 1) {
					//Er is iets ingevoerd zoals b.v 14.4
					value = splitArray[0] + '.' + splitArray[1].substr(0,2);
				}
		}
		value = parseFloat(value);
		document.getElementById(id).value = value
	}
}

function calculate_freelance_total(field){
	var totalValue = 0;
	parseFloat(totalValue);
	for(i=0;i<10;i++){
		var value = document.getElementById(field+i).value;
		if(value > 0) {
			totalValue = totalValue + parseFloat(value);
		}
	}
	document.getElementById('totalhours').value = totalValue;
}

function inputDate(name, value, after, className, idName) {
	if (after == null)	afterCheck = "true";
	else				afterCheck = "dateIsAfter(this, '" + after + "');";

	if (className == null)	classAtt = '';
	else					classAtt = ' class="' + className + '"';

	if (idName == null) idName = name;

	return '<input type="text"' + classAtt +
				' name="' + name + '"' +
				' id="' + idName + '"' +
				' value="' + value + '"' +
				' onfocus="showCalendarControl(this);"' +
				' onkeypress="hideCalendarControl(this);"' +
				' onblur="if (parseDate(this)) return ' + afterCheck + '"' +
			'/>';
}

getParentOfName = function(node, name) {
	var parent = node.parentNode;

	if (parent == null)
		return null;

	if (parent.tagName.toLowerCase() != name.toLowerCase())
		return getParentOfName(parent, name);

	return parent;
}

function calculate_total_grouped(assignmentid)
{
	var totaltotal = 0.0;								
	var diff = 0; 
	var rowTotal = new Array();

	//Eerst de totalen per dag berekenen en een array vullen met de totalen per urensoort
	for(z=1;z<8;z++)
	{	
		var total = 0.0;
		for(i=0;i<31;i++) 
		{
			if(document.getElementById('row-'+assignmentid+'-rate-'+i+'-'+z) != undefined)
			{
				var celValue = Number(document.getElementById('row-'+assignmentid+'-rate-'+i+'-'+z).value);
				
				var selectedRateType = document.getElementById('row-'+assignmentid+'-rate-'+i+'-rateid').options[document.getElementById('row-'+assignmentid+'-rate-'+i+'-rateid').selectedIndex].value;
				selectedRateType = selectedRateType.substr(0,9);
				if(selectedRateType != "allowance")
					total += celValue;

				if(rowTotal[i] == undefined)
					rowTotal[i] = 0;
				
				rowTotal[i] += celValue;	
			}
		}
		document.getElementById('row-'+assignmentid+'-total-'+z).value = total;
	}

	//daarna het totaal van de uzk van alle dagen
	for(i=1;i<8;i++)
		totaltotal += Number(document.getElementById('row-'+assignmentid+'-total-'+i).value);

	var oldTotaltotal = document.getElementById('row-'+assignmentid+'-total-total').value;
	document.getElementById('row-'+assignmentid+'-total-total').value = totaltotal;

	//Daarna de totalen per urensoort wegschrijven
	for(i=0;i<31;i++) 
	{
		if(document.getElementById('row-'+assignmentid+'-rate-'+i+'-total') != undefined)
			document.getElementById('row-'+assignmentid+'-rate-'+i+'-total').value = rowTotal[i];
	}
	
	//daarna het totaal van het complete briefje uitrekenen.
	diff = oldTotaltotal - totaltotal;
	document.getElementById('totalTotal').value = document.getElementById('totalTotal').value - Number(diff);
}


function calculate_total_hours_devision(element, assignmentid)
{
	//Rijbepalen aan de hand van het ID van het input element.
	var id = element.id;
	var brokenString=id.split('-');
	var row = Number(brokenString[(brokenString.length-2)]);

	//Totaal aantal uren ingevuld.
	filledHours = element.value;

	var restwaarde = filledHours;

	//Door de 5 door-de-weekse dagen loopen
	for(i=1;i<=5;i++)
	{
		//Eerst controleren of de huidige dag wel beschikbaar is.
		if(document.getElementById('row-'+assignmentid+'-rate-'+row+'-'+i).disabled == false)
		{
			//Als er minder dan 8 uur totaal ingevuld is, dan hoeft er maar 1 dag ingevuld te worden.
			//De overige dagen mogen leeg blijven.
			if(filledHours <= 8)
			{
				document.getElementById('row-'+assignmentid+'-rate-'+row+'-'+i).value = filledHours;
				break;
			}
			else
			{
				if(i < 5 && restwaarde >= 8 && document.getElementById('row-'+assignmentid+'-rate-'+row+'-'+(i+1)).disabled == false)
				{
					document.getElementById('row-'+assignmentid+'-rate-'+row+'-'+i).value = 8;
					restwaarde -= 8;
				}
				else
				{
					document.getElementById('row-'+assignmentid+'-rate-'+row+'-'+i).value = restwaarde;
					break;
				}
			}
		}
	}

	//De rest van de dagen resetten naar leeg
	for(k=(i+1);k<=5;k++)
		document.getElementById('row-'+assignmentid+'-rate-'+row+'-'+k).value = "";


}

function add_row_grouped(assignmentid)
{
	var counter = 0;
	var highestValue = 0;
	var parent;
	for(i=0;i<31;i++)
	{
		if(document.getElementById('TR-'+assignmentid+'-'+i) != undefined)
		{
			counter++;
			if(i > highestValue)
				highestValue = i;
		}
	}
	
	element = document.getElementById('TR-'+assignmentid+'-'+highestValue);
	parent = element;
	
	if (parent)
	{
		//parent = tr here
		clone = parent.cloneNode(true);
		clone.id = 'TR-'+assignmentid+'-'+(highestValue+1);
		
		var span = clone.getElementsByTagName('span');
		span[0].id = 'row-'+assignmentid+'-rate-'+(highestValue+1)+'-span';
		span[0].className = 'hidden';
		span[0].parentNode.style.paddingLeft = "20px";
		
		var inputElements = clone.getElementsByTagName('input');

		for (var i = 0; i < inputElements.length; i++)
		{
			var groupedcolor = 'grouped_white';
			if(inputElements[i].className.indexOf("grouped_white") == -1)
				groupedcolor = 'grouped_grey';
			if(i == 7)
			{
				inputElements[i].id = 'row-'+assignmentid+'-rate-'+(highestValue+1)+'-total';
				inputElements[i].name = 'row['+assignmentid+'][rate]['+(highestValue+1)+'][0]';
				inputElements[i].value = '';
                inputElements[i].setAttribute('onclick','SelectAll("row-'+assignmentid+'-rate-'+(highestValue+1)+'-total")');
				inputElements[i].className = groupedcolor+' row-'+assignmentid+'-rate-'+(highestValue+1);
				inputElements[i].style.backgroundColor = "";
			}
			else
			{
				inputElements[i].id = 'row-'+assignmentid+'-rate-'+(highestValue+1)+'-'+(i+1);
				inputElements[i].name = 'row['+assignmentid+'][rate]['+(highestValue+1)+']['+(i+1)+']';										
				inputElements[i].value = '';
                inputElements[i].setAttribute('onclick','SelectAll("row-'+assignmentid+'-rate-'+(highestValue+1)+'-'+(i+1)+'")');
				inputElements[i].className = groupedcolor+' row-'+assignmentid+'-rate-'+(highestValue+1);
				inputElements[i].style.backgroundColor = "";
			}
		}

		var selectElement = clone.getElementsByTagName('select');
		selectElement[0].name = 'row['+assignmentid+'][rate]['+(highestValue+1)+'][rateid]';
		selectElement[0].id = 'row-'+assignmentid+'-rate-'+(highestValue+1)+'-rateid';
		selectElement[0].setAttribute('onChange', 'calculate_total_grouped("'+assignmentid+'"); selectDeletedRate(this, "row-'+assignmentid+'-rate-'+(highestValue+1)+'")')
		selectElement[0][0].selected = "1"
		selectElement[0].style.backgroundColor = "";
		parent.parentNode.insertBefore(clone, parent.nextSibling);
	}

}

function delete_row_grouped(element, assignmentid)
{
	var parent = element;
	while (parent.tagName.toLowerCase() != 'tr' || !parent)
	{
		parent = parent.parentNode;
	}
	if (parent && parent.id != 'TR-'+assignmentid+'-0')
	{
		//parent = tr here
		parent.parentNode.removeChild(parent);
	}
	 else if (parent && parent.id == 'TR-'+assignmentid+'-0')
	{
			var backgroundcolor = document.getElementById('row-'+assignmentid+'-rate-0-rateid')[0].style.backgroundColor;
			if(backgroundcolor == 'rgb(255, 255, 255)'  || backgroundcolor == '#fff' || backgroundcolor == '#ffffff')
			{
				document.getElementById('row-'+assignmentid+'-rate-0-span').className = "hidden";
				document.getElementById('row-'+assignmentid+'-rate-0-span').parentNode.style.paddingLeft = "20px";
			}
			document.getElementById('row-'+assignmentid+'-rate-0-rateid')[0].selected = "1";
			document.getElementById('row-'+assignmentid+'-rate-0-rateid').style.backgroundColor = backgroundcolor;
			for (var i = 1; i < 8; i++)
			{
				var oldcolor = document.getElementById('row-'+assignmentid+'-rate-0-'+i).style.backgroundColor
				document.getElementById('row-'+assignmentid+'-rate-0-'+i).value = "";
				if(oldcolor == 'rgb(255, 255, 255)' || oldcolor == '#ff3232')
					document.getElementById('row-'+assignmentid+'-rate-0-'+i).style.backgroundColor = backgroundcolor;
			}
			document.getElementById('row-'+assignmentid+'-rate-0-total').value = "0";
			document.getElementById('row-'+assignmentid+'-rate-0-total').style.backgroundColor = backgroundcolor;
	}

	if(google_allowance_counter_value > 1 && parent && parent.id != 'onk_nr1')
		google_allowance_counter_value--;
	
	calculate_total_grouped(assignmentid);	
}

//unityOption = true als de backoffice optie allowance_unity_amount aanstaat
function add_allowance_new(elemId, unityOption)
{
	var allowance_counter_value = parseInt(document.getElementById(elemId).value);
	
	var parent;
	element = document.getElementById('onk_nr'+allowance_counter_value);
	parent = element;
	
	allowance_counter_value++;	
	
	if (parent)
	{
		//parent = tr here
		clone = parent.cloneNode(true);
		clone.id = 'onk_nr'+allowance_counter_value;
		
		var inputElements = clone.getElementsByTagName('input');
		inputElements[0].id = 'amount_nr'+allowance_counter_value;
		if(unityOption == true)
		{
			inputElements[1].id = 'value_nr'+allowance_counter_value;
		}
		for (var i = 0; i < inputElements.length; i++)
			inputElements[i].value = '';

		var selectElement = clone.getElementsByTagName('select');
		selectElement[0].id = 'select_nr'+allowance_counter_value;
		selectElement[0].selectedIndex = 0;

		parent.parentNode.insertBefore(clone, parent.nextSibling);

		if(unityOption == true)
		{
			selectElement[0].onchange = inputElements[0].onchange = function() {
				var selectBox = document.getElementById('select_nr'+allowance_counter_value);
				var filledAmount = parseFloat(document.getElementById('amount_nr'+allowance_counter_value).value);
				var tarief = parseFloat(selectBox.options[selectBox.selectedIndex].title);
				var newValue = tarief * filledAmount;
				
				if(tarief && newValue >= 0)
				{
					//afronden op 1 getal achter de komma
					newValue=Math.round(newValue*10)/10;
					document.getElementById('value_nr'+allowance_counter_value).value = newValue;
				}
				else
					document.getElementById('value_nr'+allowance_counter_value).value = '';
			} 
		}
	}
	
	document.getElementById(elemId).value = allowance_counter_value; 
}

function remove_allowance_new(element, elemId)
{
	var parent = element;
	var allowance_counter_value = parseInt(document.getElementById(elemId).value);

	while (parent.tagName.toLowerCase() != 'tr' || !parent)
	{
		parent = parent.parentNode;
	}
	if (parent && parent.id != 'onk_nr1')
	{
		//parent = tr here
		parent.parentNode.removeChild(parent);
	}
	else if (parent && parent.id == 'onk_nr1')
        {
                document.getElementById('select_nr1').value = ""
                document.getElementById('amount_nr1').value = ""
        }
        
        if(allowance_counter_value > 1 && parent && parent.id != 'onk_nr1')
	{
		allowance_counter_value--;	
		document.getElementById(elemId).value = allowance_counter_value;
	}
        
}

function calculate_allowance_value(teller)
{
	var selectBox = document.getElementById('select_nr'+teller);
	var filledAmount = parseFloat(document.getElementById('amount_nr'+teller).value);
	var tarief = parseFloat(selectBox.options[selectBox.selectedIndex].title);
	var newValue = tarief * filledAmount;
	
	if(tarief && newValue >= 0)
	{
		//afronden op 1 getal achter de komma
		newValue=Math.round(newValue*10)/10;
		document.getElementById('value_nr'+teller). value = newValue;
	}
	else
		document.getElementById('value_nr'+teller). value = '';
}

function delete_row_transform(element)
{
	var parent = element;
	while (parent.tagName.toLowerCase() != 'tr' || !parent)
	{
		parent = parent.parentNode;
	}
	if (parent && parent.id != 'TR-0')
	{
		//parent = tr here
		parent.parentNode.removeChild(parent);
	}
	totalRowsTransform--;
}

function add_row_transform()
{
	var counter = 0;
	var highestValue = 0;
	var parent;
	for(i=0;i<51;i++)
	{
		if(document.getElementById('TR-'+i) != undefined)
		{
			counter++;
			if(i > highestValue)
				highestValue = i;
		}
	}
	
	element = document.getElementById('TR-'+highestValue);
	parent = element;
	
	if (parent)
	{
		//parent = tr here
		clone = parent.cloneNode(true);
		clone.id = 'TR-'+(highestValue+1);
		
		var inputElements = clone.getElementsByTagName('input');
		
		inputElements[0].id = 'row-staffingcustomer-'+(highestValue+1)+'-fromid';
		inputElements[0].name = 'row[staffingcustomer]['+(highestValue+1)+'][from_id]';										
		inputElements[0].value = '';

		inputElements[1].id = 'row-staffingcustomer-'+(highestValue+1)+'-toid';
		inputElements[1].name = 'row[staffingcustomer]['+(highestValue+1)+'][to_id]';										
		inputElements[1].value = '';

		inputElements[2].id = 'row-staffingcustomer-'+(highestValue+1)+'-tolocationid';
		inputElements[2].name = 'row[staffingcustomer]['+(highestValue+1)+'][to_location_id]';										
		inputElements[2].value = '';
		
		parent.parentNode.insertBefore(clone, parent.nextSibling);
	}
	totalRowsTransform++;
}

var google_allowance_counter_value;
var currentRow;

function initializeGoogleAllowance() 
{
	if (GBrowserIsCompatible()) 
	{
    	//nieuw object ZONDER parameters, want we willen nl. geen geschreven route EN geen map tonen....
		//http://code.google.com/apis/maps/documentation/reference.html#GDirections
		gdir = new GDirections();
		GEvent.addListener(gdir,"load", set_distance);
		GEvent.addListener(gdir, "error", handleErrors);
	}
}

function setDirections(counter) 
{
	//http://code.google.com/apis/maps/documentation/reference.html#GDirectionsOptions
	
	fromAddress = document.getElementById('google_departure_nr'+counter).value; 
	toAddress = document.getElementById('google_arrival_nr'+counter).value; 

	var locale = 'nl'; 
	currentRow = counter;
	
	if(fromAddress != '' && toAddress != '')
		gdir.load("from: " + fromAddress + " to: " + toAddress, {locale: locale, travelMode:G_TRAVEL_MODE_DRIVING,avoidHighways: false} );
}

function set_distance() 
{
	var distance = gdir.getDistance().meters/1000;
	distance = Math.round((distance)*100)/100;
	document.getElementById("google_google_nr"+currentRow).value = distance;
	
	//Totaal van de rij optellen (km + afwijking)
	deviation = document.getElementById("google_deviation_nr"+currentRow).value;
	if(deviation == undefined || deviation == "")
		deviation = 0;

	document.getElementById("google_amount_nr"+currentRow).value = Math.round((distance + parseFloat(deviation))*100)/100;
	
	calculate_google_totals('google');
	calculate_google_totals('amount');
}

function handleErrors()
{
	//http://code.google.com/apis/maps/documentation/reference.html#GGeoStatusCode
   	
   	var error = false;
   	
   	if(gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
   	{
    	alert("Onbekend Adres.");
   		error = true;
   	}
   	else if(
   			gdir.getStatus().code == G_GEO_SERVER_ERROR || 
   			gdir.getStatus().code == G_GEO_MISSING_QUERY || 
   			gdir.getStatus().code == G_GEO_MISSING_ADDRESS ||
   			gdir.getStatus().code == G_GEO_BAD_KEY ||
   			gdir.getStatus().code == G_GEO_BAD_REQUEST ||
   			gdir.getStatus().code == G_GEO_UNAVAILABLE_ADDRESS ||
   			gdir.getStatus().code == G_GEO_TOO_MANY_QUERIES
   			)
   	{
    	alert("De afstand kan niet worden berekend.");
   		error = true;
   	}
   	else if (gdir.getStatus().code == G_GEO_UNKNOWN_DIRECTIONS)
   	{
     	alert("De afstand kan niet worden berekend, omdat er geen route beschikbaar is.");     
   		error = true;
   	}

	if(error == true)
	{
		document.getElementById("google_amount_nr"+currentRow).value = '';
		document.getElementById("google_google_nr"+currentRow).value = '';
		calculate_google_totals('google');
	}
}

function calculate_google_totals(field)
{
	var total = 0;
	//Er zijn maximaal 15 rijen met google reiskosten.
	
	for(i=1;i<16;i++) 
	{
		elem = document.getElementById('google_'+field+'_nr'+i); 
        if (elem == undefined)
        	break;

		var value = elem.value;
		if(value == '' || value == undefined)
			value = 0;

		if (value != '') {
			splitArray = value.split(',');
			if (splitArray.length > 1) {
				value = splitArray[0] + '.' + splitArray[1];
			}
			temp = parseFloat(value);
			total += temp;
		}
	}
	
	total = Math.round((total)*100)/100;
	document.getElementById('google_total_'+field).value = total;
}

   
function add_google_allowance_new()
{
	
	//niet meer dan 15 rijen toevoegen
	if(google_allowance_counter_value >= 15)
		return;
	
	var parent;
	element = document.getElementById('google_onk_nr'+google_allowance_counter_value);
	parent = element;
	
	google_allowance_counter_value++;	
	
	if (parent)
	{
		//parent = tr here
		clone = parent.cloneNode(true);
		clone.id = 'google_onk_nr'+google_allowance_counter_value;
		
		var inputElements = clone.getElementsByTagName('input');
		
		inputElements[0].id = 'google_departure_nr'+google_allowance_counter_value;
		inputElements[1].id = 'google_arrival_nr'+google_allowance_counter_value;
		inputElements[2].id = 'google_google_nr'+google_allowance_counter_value;
		inputElements[3].id = 'google_deviation_nr'+google_allowance_counter_value;
		inputElements[4].id = 'google_amount_nr'+google_allowance_counter_value;
		inputElements[5].id = 'google_deviation_reason_nr'+google_allowance_counter_value;

		inputElements[0].className = google_allowance_counter_value;
		inputElements[1].className = google_allowance_counter_value;
		inputElements[3].className = google_allowance_counter_value;

		inputElements[0].onchange = function() 
		{
			setDirections(this.className);
		} 

		inputElements[1].onchange = function() 
		{
			setDirections(this.className);
		} 

		inputElements[3].onchange = function() 
		{
			calculate_google_row_total(this.className);
		} 

		for (var i = 0; i < inputElements.length; i++)
			inputElements[i].value = '';

		var selectElement = clone.getElementsByTagName('select');
		selectElement[0].id = 'google_select_nr'+google_allowance_counter_value;
		selectElement[0].selectedIndex = 0;
		selectElement[1].id = 'google_date_nr'+google_allowance_counter_value;
		selectElement[1].selectedIndex = 0;

		parent.parentNode.insertBefore(clone, parent.nextSibling);

	}
}



function remove_google_allowance_new(element)
{
	var parent = element;
        
	while (parent.tagName.toLowerCase() != 'tr' || !parent)
	{
		parent = parent.parentNode;
	}
	if (parent && parent.id != 'google_onk_nr1')
	{
		//parent = tr here
		parent.parentNode.removeChild(parent);
	}
        else if (parent && parent.id == 'google_onk_nr1')
        {
                document.getElementById('google_select_nr1').value = ""
                document.getElementById('google_departure_nr1').value = ""
                document.getElementById('google_arrival_nr1').value = ""
                document.getElementById('google_google_nr1').value = "0"
                document.getElementById('google_deviation_nr1').value = ""
                document.getElementById('google_amount_nr1').value = ""
                document.getElementById('google_deviation_reason_nr1').value = ""
        }
	
	if(google_allowance_counter_value > 1 && parent && parent.id != 'onk_nr1')
		google_allowance_counter_value--;	

	calculate_google_totals('google');
	calculate_google_totals('amount');
	calculate_google_totals('deviation');
}

function calculate_google_row_total(row)
{
	document.getElementById("google_deviation_nr"+row).value = document.getElementById("google_deviation_nr"+row).value.replace(',','.');
	
	var GoogleValue = parseFloat(document.getElementById("google_google_nr"+row).value);
	var deviationValue = parseFloat(document.getElementById("google_deviation_nr"+row).value);
	
	if(GoogleValue > 0)
	{
		if(!isNaN(deviationValue))
			document.getElementById("google_amount_nr"+row).value = Math.round((GoogleValue + deviationValue)*100)/100;	
		else
			document.getElementById("google_amount_nr"+row).value = GoogleValue;
	}

	calculate_google_totals('deviation');
	calculate_google_totals('amount');
}

function getEnterKeyCode(e)
{
     var key;
     if(window.event)
          key = window.event.keyCode;     //IE
     else
          key = e.which;     //firefox

     if(key == 13)
          return true;
     else
          return false;
}

function setTimeOutSelectAll(ref) {
    globalTakeFocus=ref;
    setTimeout("SelectAll(globalTakeFocus)",100);
}

function SelectAll(id)
{
    document.getElementById(id).focus();
    document.getElementById(id).select();
}

var rateValue = null;
function storeRateValue(value)
{
    rateValue = value;
}

function checkTotalRateValue(element)
{
    elementId = element.id.split("-");
    var error = false;
    if(elementId[4] == "total")
    {        
        for(i=1;i<8;i++)
        {
            if(document.getElementById(elementId[0]+"-"+elementId[1]+"-total-"+i).value > 24)
            {
                error = true;
            }
        }
        if(error == true)
        {
            alert('Op een van de dagen is het totaal aantal uur hoger dan 24');
            element.value = rateValue;
            calculate_total_hours_devision(element, elementId[1]);
            calculate_total_grouped(elementId[1]);
            var form = document.getElementById('add_multiple');
            setTimeOutSelectAll(element.id);
        }
    }
    else
    {
        if(document.getElementById(elementId[0]+"-"+elementId[1]+"-total-"+elementId[4]).value > 24)
        {
            alert('Het totaal aantal uur is hoger dan 24');
            element.value = rateValue;
            calculate_total_grouped(elementId[1]);
            setTimeOutSelectAll(element.id);
        }
    }
}

/**
 * get all elements by className
 * @param string classname the classname to search
 * @param string node the parent where to search in
 *
 * @return array a array of elements
 * @author tat (Thomas Testerink)
 */
function getElementsByClassName(classname, node)  {
    if(!node) node = document.getElementsByTagName("body")[0];
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}

/**
 * toggle between the hidden class of a element
 * @param string classname the classes of the element
 * @author tat (Thomas Testerink)
 */
function toggleHideClass(classname)
{
	var elements = getElementsByClassName(classname);
	for(var i=0;i<elements.length;i++)
	{
		if(elements[i].className == classname+" hidden")
		{
			elements[i].className = elements[i].className.replace(" hidden", "");
		}
		else
		{			
			elements[i].className = classname+" hidden";
		}
		
	}
}
/**
 * show or hide rows
 * @param string classname the classes of the element
 * @author tat (Thomas Testerink)
 */
function showhidemultiple(classname) {
	toggleHideClass(classname);
	toggleHideClass(classname+"showhide");
}

/**
 * same as the in array php function
 * @param string needle The searched value.
 * @param array the search array
 * @param argStrict If the third parameter strict is set to TRUE  then the in_array() function will also check the types of the needle in the haystack.
 * @return true or false
 * @author tat (Thomas Testerink)
 */
function in_array (needle, haystack, argStrict) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: vlado houba
    // +   input by: Billy
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
    // *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
    // *     returns 2: false
    // *     example 3: in_array(1, ['1', '2', '3']);
    // *     returns 3: true
    // *     example 3: in_array(1, ['1', '2', '3'], false);
    // *     returns 3: true
    // *     example 4: in_array(1, ['1', '2', '3'], true);
    // *     returns 4: false

    var key = '', strict = !!argStrict;

    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }

    return false;
}

function selectDeletedRate(element, className)
{
	if(element.options[element.selectedIndex].getAttribute('deleted') != null)
	{
		document.getElementById(className+'-span').className = ""
		document.getElementById(className+'-span').parentNode.style.paddingLeft = "1px";
		element.style.backgroundColor = "#FF3232";
		var elements = getElementsByClassName(className);
		for(var i=0;i<elements.length;i++)
		{
			elements[i].style.backgroundColor = "#FF3232";;

		}
		document.getElementById(className+'-total').style.backgroundColor = "#FF3232";;
	}
	else
	{
		document.getElementById(className+'-span').className = "hidden";
		document.getElementById(className+'-span').parentNode.style.paddingLeft = "20px";
		element.style.backgroundColor = "";
		var elements = getElementsByClassName(className);
		for(var i=0;i<elements.length;i++)
		{
			elements[i].style.backgroundColor = "";

		}
		document.getElementById(className+'-total').style.backgroundColor = "";
	}

}
/*
*/
