String.prototype.trim=function String_trim() {  return this.replace(/^ +| +$/g,'');}

var formError, formErrorObj;

function Trim(TRIM_VALUE){
	return LTrim(RTrim(TRIM_VALUE));
} //End Function

function RTrim(VALUE){
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	if(v_length < 0) return "";
	var iTemp = v_length -1;
	while(iTemp > -1){
		if(!(VALUE.charAt(iTemp) == w_space)){
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;
	} //End While
	return strTemp;
} //End Function

function LTrim(VALUE){
	var w_space = String.fromCharCode(32);
	if(v_length < 1) return "";
	var v_length = VALUE.length;
	var strTemp = "";
	var iTemp = 0;
	while(iTemp < v_length){
		if(!(VALUE.charAt(iTemp) == w_space)){
			strTemp = VALUE.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function
    
function addFormError(inputObj, errorStr) {
  if (formErrorObj == null) formErrorObj = inputObj;
	
	if (inputObj.parentNode.className=='DateDropDowns') inputObj = inputObj.parentNode;
	
  inputObj.parentNode.parentNode.style.backgroundColor='#FFFF88';
	
  formError += '\n  - ' + errorStr;
}

function isRichEdit(inputObj) {
	var id = '_' + inputObj.id + '_';
	return document.getElementById(id);
}
    
function checkForEmptyInput(inputObj, errorStr) {
	
  switch(inputObj.tagName) {
    case 'TEXTAREA':
      if (inputObj.value=='') {
				var richEdit = isRichEdit(inputObj);
				addFormError(richEdit?richEdit:inputObj, errorStr);
				return false;
			}
      break;
    case 'SELECT':
      if ((inputObj.selectedIndex < 0) || (inputObj.options[inputObj.selectedIndex].value=='')) {
				addFormError(inputObj, errorStr);
				return false;
			}
      break;
    case 'INPUT':
      if (inputObj.value=='') {
				addFormError(inputObj, errorStr);
				return false;
			}
      break;
    default: {
      	addFormError(null, 'Unrecognized tagname: ' + inputObj.tagName);
				return false;
			}
  }

  inputObj.parentNode.parentNode.style.backgroundColor='';
	return true;
}

//--------------------------------------------------------------------------------
// checkForValidDate
// 
// Controleer of een gegeven datum gedlig is (format) en produceer eventueel 
// een form error 
//--------------------------------------------------------------------------------

function checkForValidDate(inputObj, errorStr) {
  if (!isValidDate(inputObj.value)) {
        addFormError(inputObj, errorStr);
        lightenControl(inputObj);s
        return false;
  }
  return true;
}

//--------------------------------------------------------------------------------
// checkForDateAfter
// 
// Controleer of een gegeven datum na een bepaalde datum ligt en produceer 
// eventueel een form error
//--------------------------------------------------------------------------------

function checkForDateAfter(inputObj, aDate, errorStr) {
  var dateToCompare = new Date();
  dateToCompare = GetDateFromString(inputObj.value);
  if (dateToCompare > aDate) {
    darkenControl(inputObj);
    return true;
  }
  else {
    addFormError(inputObj, errorStr);
    lightenControl(inputObj);
    return false;
  }
}

//--------------------------------------------------------------------------------
// checkForValidInt
//
// Controleer og een gegeven value een geldige integer waarde bevat
//--------------------------------------------------------------------------------

function checkForValidInt(inputObj, errorStr) {

  var validChars = "0123456789";
  var aChar;
  var str = new String(inputObj.value);
   
  if (str.length == 0) {
    addFormError(inputObj, errorStr);
    lightenControl(inputObj);
    return false;
  }
  
  for (var i = 0; i < str.length; i++) {
    aChar = str.charAt(i);
    if (validChars.indexOf(aChar) == -1) {
      addFormError(inputObj, errorStr);
      lightenControl(inputObj);
      return false;
    }
  }
  darkenControl(inputObj);
  return true
}

//--------------------------------------------------------------------------------
// checkForDateBefore
// 
// Controleer of een gegeven datum voor een bepaalde datum ligt en produceer 
// eventueel een form error
//--------------------------------------------------------------------------------

function checkForDateBefore(inputObj, aDate, errorStr) {
  var dateToCompare = new Date();
  dateToCompare = GetDateFromString(inputObj.value);
  if (dateToCompare < aDate) {
    darkenControl(inputObj);
    return true;
  }
  else {
    addFormError(inputObj, errorStr);
    lightenControl(inputObj);
    return false;
  }
}

//--------------------------------------------------------------------------------
// checkForDateAfterEqual
// 
// Controleer of een gegeven datum op of na een bepaalde datum ligt en produceer 
// eventueel een form error
//--------------------------------------------------------------------------------

function checkForDateAfterEqual(inputObj, aDate, errorStr) {
  var dateToCompare = new Date();
  dateToCompare = GetDateFromString(inputObj.value);
  if (dateToCompare >= aDate) {
    darkenControl(inputObj);
    return true;
  }
  else {
    addFormError(inputObj, errorStr);
    lightenControl(inputObj);
    return false;
  }
}

//--------------------------------------------------------------------------------
// checkForDateBeforeEqual
// 
// Controleer of een gegeven datum op of voor een bepaalde datum ligt en produceer 
// eventueel een form error
//--------------------------------------------------------------------------------

function checkForDateBeforeEqual(inputObj, aDate, errorStr) {
  var dateToCompare = new Date();
  dateToCompare = GetDateFromString(inputObj.value);
  if (dateToCompare <= aDate) {
    darkenControl(inputObj);
    return true;
  }
  else {
    addFormError(inputObj, errorStr);
    lightenControl(inputObj);
    return false;
  }
}

function noDateSelected(form, name) {
	var dayObj   = form[name + '_day'];
	var monthObj = form[name + '_month'];
	var yearObj  = form[name + '_year'];

	if (dayObj.options[0].value=='')
		return ((dayObj.selectedIndex<1) || (monthObj.selectedIndex<1) || (yearObj.selectedIndex<1));
	else
		return ((dayObj.selectedIndex<0) || (monthObj.selectedIndex<0) || (yearObj.selectedIndex<0));
}

function checkForNoDate(form, name, errorStr) {
	var dayObj   = form[name + '_day'];
	var monthObj = form[name + '_month'];
	var yearObj  = form[name + '_year'];
	
  dayObj.parentNode.parentNode.parentNode.style.backgroundColor='';
	
	if (noDateSelected(form, name)) {
    addFormError(dayObj, errorStr);
		return false;
	}
	
	dayObj   = dayObj.options[dayObj.selectedIndex].value;
	monthObj = monthObj.options[monthObj.selectedIndex].value-1;
	yearObj  = yearObj.options[yearObj.selectedIndex].value;
	
	date = new Date(yearObj, monthObj, dayObj);
	
	return true
}

function getDateFromCalendar2(obj) {
	var aDate = new String(obj.value);
	if (aDate=='') return null;
	
	aDate = aDate.trim();
	var m = aDate.match(/^((((0?)[1-9])|([12][0-9])|(3[01]))-(((0?)[1-9])|(1[0-2]))-((((0?)[0-9])|([0-9]{2}))|(([0-9]{3,4}))))?$/);
	var dd = parseInt(m[2], 10);
	var mm = parseInt(m[7], 10);
	var yy = parseInt(m[11], 10);
	return new Date(yy, mm-1, dd);
}

function twoDigits(n) {
	if (n<10) return '0' + n;
	else return n;
}

function isValidDate(aDate) {


	aDate = new String(aDate);
	aDate = aDate.trim();
	var m = aDate.match(/^((((0?)[1-9])|([12][0-9])|(3[01]))-(((0?)[1-9])|(1[0-2]))-((((0?)[0-9])|([0-9]{2}))|(([0-9]{3,4}))))?$/);
	if (m==null) return '';
	else {
		var dd = parseInt(m[2], 10);
		var mm = parseInt(m[7], 10);
		var yy = parseInt(m[11], 10);
		var d = new Date(yy, mm-1, dd);
		if ((d.getDate()==dd) &&
		    ((d.getMonth()+1)==mm)) {
			dd = twoDigits(d.getDate());
			mm = twoDigits(d.getMonth()+1);
			if (yy<100) {
				if (yy<20) yy = '20' + twoDigits(yy);
				else yy = '19' + twoDigits(yy);
			} else {
				if ((yy<=1000) || (yy>=2050)) return '';
			}

			// eval voorkomt foutmeldingen...
			_controledatum = eval('document.formulier._ControleDatum');
			if (_controledatum)
			{
				aDate = _controledatum.value.toString().split('-');
				var _date  = new Date(yy,mm,dd,'00','00','00');
				var _cdate = new Date(aDate[0],aDate[1],aDate[2],'00','00','00');
				if (_date < _cdate)
					return '';
			}
			// ...
			return dd + '-' + mm + '-' + yy;
		} else
			return '';
	}
}

function toDate(obj) {
	if (obj.value.trim()=='') {
		obj.value = '';
		return true;
	}
	var aDate = isValidDate(obj.value);
	if (aDate != '') {
		obj.value = aDate;
		return true;
	}

	// eval voorkomt foutmeldingen...
	var extraMelding = "";
	_controledatum = eval('document.formulier._ControleDatum');
	if (_controledatum)
		extraMedling += '\n\nLet op\nDe datum die u invoert mag niet voor de datum van de aanbieding liggen';

	alert(obj.value + ' is geen geldige datum!'+extraMelding);
	obj.focus();
	obj.select();
	return false;
}

function GetDateFromString(dateStr) {
  dateStr = new String(dateStr);
  var yyyy = dateStr.substr(6, 4);
  var mm = dateStr.substr(3,2);
  var dd = dateStr.substr(0,2);
  return new Date(yyyy, mm-1, dd);
}

function hasMultipleOccurancesOf(aString, aSubString) {
	return (aString.indexOf(aSubString) != aString.lastIndexOf(aSubString));
}

function isValidDutchMoney(value) {
	value = new String(value);
	if (value.charAt(0)=='') value = value.substr(1, value.length-1);
	value = value.replace(/\./g, '');
	return (value.match(/^(\d+(,\d{1,2})?)?$/)!=null);
}

function replaceCommas(value) {
	value = new String(value);
	value = value.replace(/\./g, '');
	return value.replace(/,/g, '.');
}

function replaceDots(value) {
	value = new String(value);
	return value.replace(/\./g, ',');
}

function addDots(value) {
	value = new String(value);
	var a = value.split(',');
	
	var b = a[0].split('');
	a[0] = '';
	c=0;
	
	d = b.length;
	
	for (var i=d; i>0; i--) {
		if (c==3) {
			a[0] = '.' + a[0];
			c=0;
		}
		c++;
		a[0] = b[i-1] + a[0];
	}
	return a.join(',');
}

/*function replaceSingleQuotes(value) {
	value = new String(value);
	return value.replace('\'', ' ');
}*/

function getNederlandsBedrag(bedrag) {
	bedrag = new String(bedrag);
	if (bedrag.charAt(0)=='') bedrag = bedrag.substr(1, bedrag.length-1);
	return parseFloat(replaceCommas(bedrag));
}

function removeEuro(obj) {
	var bedrag = obj.value;
	if (bedrag.charAt(0)=='') bedrag = bedrag.substr(1, bedrag.length-1);
	bedrag = bedrag.replace(/\./g, '');
	obj.value = bedrag;
	obj.select();
}

function toNederlandsBedrag(obj, skipUpdate) {
	if (isValidDutchMoney(obj.value)) {
		if (obj.value!='')
			obj.value = '' + addDots(replaceDots(getNederlandsBedrag(obj.value).toFixed(2)));
	} else {
		alert(obj.value + ' is geen geldig bedrag!');
		obj.select();
		obj.focus();
	}
	if (!skipUpdate) updateTotaleHuurprijs();
}

function isValidPostcode(postcode) {
	postcode = new String(postcode);
	postcode = postcode.trim();
	var m = postcode.match(/^(([1-9][0-9]{3}) *([a-zA-Z]{2}))?$/);
	if (m==null) return null;
	else return Trim(m[2] + ' ' + m[3].toUpperCase());
}

function toPostcode(obj) {
	var postcode = isValidPostcode(obj.value);
	if (postcode != null) {
		obj.value = postcode;
	} else {
		alert(obj.value + ' is geen geldige postcode!');
		obj.select();
		obj.focus();
	}
}

function isValidEmail(email) {
	email = new String(email);
	email = email.trim();
	var m = email.match(/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/);
	if (m==null) return '';
	else return email;
}

function toEmail(obj) {
	var email = new String(obj.value);
	email = email.trim();
	if (email=='') return;
	email = isValidEmail(email);
	if (email != '') {
		obj.value = email;
	} else {
		alert(obj.value + ' is geen geldig e-mailadres!');
		obj.select();
		obj.focus();
	}
}

function isValidTelefoon(telefoon) {
	telefoon = new String(telefoon);
	
	// 00 aan het begin betekent internationaal nummer: altijd accepteren!
	if (telefoon.substr(0,2)=='00') return telefoon; 
	
	// Nederlandse telefoonnummers checken!
	telefoon = telefoon.trim();
	var m = telefoon.match(/^(0(((6-[0-9]{8})|([0-9]{9}))|([0-9]{2}-[0-9]{7})|([0-9]{3}-[0-9]{6})))$/);
	if (m==null) return '';
	else return telefoon;
}

function toTelefoon(obj) {
	var telefoon = new String(obj.value);
	telefoon = telefoon.trim();
	if (telefoon=='') return;
	telefoon = isValidTelefoon(telefoon);
	if (telefoon != '') {
		obj.value = telefoon;
	} else {
		alert(obj.value + ' is geen geldig telefoonnummer!');
		obj.select();
		obj.focus();
	}
}

function toJaartal(obj) {
	var valueStr = new String(obj.value);
	if (valueStr!='') {
		var value = parseInt(valueStr);
		if (isNaN(value)) {
			alert(obj.value + ' is geen geldig getal!');
		} else {
			if ((value<1800) || (value>9999)) {
				// verplichten tot het invullen van 4 cijfers!
				alert(obj.value + ' is geen jaartal met 4 cijfers!');
				obj.select();
				obj.focus();
			} else {
				obj.value = value;
			}
		}
	}
}

function toAantalJaar(obj) {
	var valueStr = new String(obj.value);
	if (valueStr!='') {
		var value = parseInt(valueStr);
		if (isNaN(value)) {
			alert(obj.value + ' is geen geldig getal!');
			obj.select();
			obj.focus();
		} else {
			obj.value = value + ' jaar';
		}
	}
}

function toAantalM2(obj) {
	var valueStr = new String(obj.value);
	if (valueStr!='') {
		var value = parseInt(valueStr);
		if (isNaN(value)) {
			alert(obj.value + ' is geen geldig getal!');
			obj.select();
			obj.focus();
		} else {
			obj.value = value + ' mē';
		}
	}
}

function toAantal(obj) {
	var valueStr = new String(obj.value);
	if (valueStr!='') {
		var value = parseInt(valueStr);
		if (isNaN(value)) {
			alert(obj.value + ' is geen geldig getal!');
			obj.select();
			obj.focus();
		} else {
			obj.value = value;
		}
	}
}

function toInteger(obj) {
	var valueStr = new String(obj.value);
	if (valueStr!='') {
		var value = parseInt(valueStr);
		if (isNaN(value))
			obj.value = '';
		else 
			obj.value = value;
		obj.select();
	}
}

function isValidBSN(value) {
    var str = new String(value)
    var multiplier = 9
    var count = 0
    for (n=0; n<str.length; n++) {
        count += parseInt(str.charAt(n))*multiplier;
        multiplier -= 1;
        if (multiplier==1) multiplier = -1;
    }
    if ((value=='') || (count % 11 != 0)) {
        return null;
    }
    else {
        return value;
    }
}

function toBSN(obj) {
    var bsn = isValidBSN(obj.value);
	if (bsn != null) {
		obj.value = bsn;
	} else {
		alert(obj.value + ' is geen geldig Burger Service Nummer (BSN)!');
		obj.select();
		obj.focus();
	}
}

function DateToString(d) {
	// Month is 0-based
	return twoDigits(d.getDate()) + '-' + twoDigits(d.getMonth()+1) + '-' + d.getFullYear();
}

function toMinLength(obj, minlength) {
	var txt = new String(obj.value);
	txt = txt.trim();
	if (txt.length<minlength) {
		alert('Wachtwoord moet minimaal ' + minlength + ' karakters lang zijn.');
		obj.select();
		obj.focus();
	}
	obj.value = txt;
}

//Maak achtergrond kleur van een control geel (fout in het formulier)
function lightenControl(Obj) {	
	if (Obj.parentNode.className=='DateDropDowns') Obj = Obj.parentNode;
  	Obj.parentNode.parentNode.style.backgroundColor='#FFFF88';
}

//Maak achtergrond kleur van een control weer normaal
function darkenControl(Obj) {	
	if (Obj.parentNode.className=='DateDropDowns') Obj = Obj.parentNode;
  	Obj.parentNode.parentNode.style.backgroundColor='';
}