/*
	Functies messagent2009.js
	=========================
	
	 0. Detecteert de url-parameter MA_DEBUG=1; indien aanwezig wordt er debug-info geladen en getoond in de statusbalk
	 1. Detecteert het land;
	 2. Zet classes op radiobuttons en checkboxes
	 3. zet kalenders op geboortedatumvelden en voegt hiddenn fields toe om datum te capteren in ORCA-formaat
	 4. Zet dealerlocators op dealervelden en voegt veld toe om de dealer-description te tonen
	 5. Als PERS_SALUTATION op het fomulier staat en geen PERS_GENDER wordt er een hidden field GENDER toegevoegd dat automatisch gevuld wordt bij het selecteren van de aanspreking
	 6. Zorgt ervoor dat de initialen altijd uppercase zijn en achter elke letter een punt staat
	 7. Zorgt ervoor dat telefoonnummers worden opgemaakt afhankelijk van het land (zie 1.)
	 8. Zorgt ervoor dat de postcode enkel kan ingevuld worden cfr het land (zie 1.); voor BE en LU enkel 4 cijfers, voor NL 4 cijfers en 2 letters
	 9. Zorgt ervoor dat bij het klikken op de verzendknop (id=MA_SUBMIT) de knop disabled wordt om 2x submitten te voorkomen
	10. Zet na het laden van het formulier de focus op het eerste zichtbare en editeerbare veld
	11. Zet na het detecteren van fouten de focus op het eerste zichtbare, editeerbare en foute veld
	12. Staat in voor het genereren van de CAR_ERD-dropdownn (dynamisch veld)
	13. Staat ervoor in dat bij huisnummer en telefoonnummers enkel cijfers ingevuld kunnen worden
*/
var _countryCode 	= "be";
var _bDebug 		= false;
var firstErrorField = null;
var ua 				= navigator.userAgent.toLowerCase(); 
//var _isIE 			= ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('msie 8') == -1 )); 
var _isIE 			= ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) ); 
// === Algemene functies =================================
function ShowDiv(id)
{
	SetVisibility(id, true);
}
function HideDiv(id)
{
	SetVisibility(id, false);
}
function getEl(id)
{
	return document.getElementById(id);
}
function out(text)
{
	document.write(text);
}
Array.prototype.exists=Array_exists;
function Array_exists(value) {
	for(var i=0; i<this.length; i++) {
		if(this[i]==value) {
			return true;
		}
	}
	return false;
}
function __addEvent(objName, type, fn, tmp) 
{
	var obj = getEl(objName);
	if(!obj)
	{
		if(_bDebug) window.status = "Element " + objName + " not found";
		return false;
	}
	else
	{
			
		tmp || (tmp = true);
		if( obj.attachEvent ) {
				obj["e"+type+fn] = fn;
				obj[type+fn] = function(){obj["e"+type+fn]( window.event );};
				obj.attachEvent( "on"+type, obj[type+fn] );
		} else {
				obj.addEventListener( type, fn, true );
		};
	}
}
function __removeEvent(objName, type, fn) 
{
	var obj = getEl(objName);
	if(!obj)
	{
		if(_bDebug) window.status = "Element " + objName + " not found";
		return false;
	}
		
	if( obj.detachEvent ) {
			obj.detachEvent( "on"+type, obj[type+fn] );
			obj[type+fn] = null;
	} else {
			obj.removeEventListener( type, fn, true );
	};
}
function doSetCaretPosition (oField, iCaretPos) 
{
	if (document.selection) { 
		var oSel = document.selection.createRange();
		oSel.moveStart ('character', -oField.value.length);
		oSel.moveStart ('character', iCaretPos);
		oSel.moveEnd ('character', 0);
		oSel.select ();
	}
	else if (oField.selectionStart || oField.selectionStart == '0') {
		oField.selectionStart = iCaretPos;
		oField.selectionEnd = iCaretPos;
		oField.focus ();
	}
}
function detectCountry()
{
	var loc = document.location.href;
	var begin = loc.indexOf("//")+2;
	loc = loc.substring(begin, loc.length);
	loc = loc.substring(0, loc.indexOf("/"));
	var dot = loc.lastIndexOf(".")+1;
	_countryCode = loc.substr(dot, loc.length).toUpperCase();
	if(getEl("PERS_POSTAL_CODE"))
	{
		if(_countryCode == "NL")
			getEl("PERS_POSTAL_CODE").maxLength = 6;
		else
			getEl("PERS_POSTAL_CODE").maxLength = 4;
	}
}
// === Input in velden beperken ========================== 
function isNumberKey(e)
{
	// Gebruik; <INPUT ...  onKeyPress="return isNumberKey(event);" />
	if (e == null) e = window.event;
	//var charCode = e.keyCode ? e.keyCode : e.charCode;
	var charCode = (e.which) ? e.which : e.keyCode;
	if (charCode > 31 && (charCode < 48 || charCode > 57))
	{
		if (e.stopPropagation) {
				e.stopPropagation();
				e.preventDefault();
		}
		if(_isIE) {
			e.cancelBubble = true;
			e.returnValue = false;
		}
		return false;
	}
	return true;
}
function formatPhoneNumber(e)
{
	// Gebruik; <INPUT ... onKeyUp="formatPhoneNumber(event)" />
	if (e == null) e = window.event;
	var field = null;
	/*
	if(e.target)
		field = e.target;
	else
		field = e.srcElement;
	*/
	if (e.target) field = e.target;
	else if (e.srcElement) field = e.srcElement;
	try {
		if (field.nodeType == 3) // defeat Safari bug
			field = field.parentNode;
	} catch(ex) {}

	if(field.value.length <5) return;
	// Mogelijke prefixes in arrays
	var Landcodes 		= new Array("1787", "1246", "972", "971", "963", "961", "599", "597", "592", "591", "504", "420", "386", "385", "376", "359", "358", "357", "356", "354", "353", "352", "351", "297", "264", "94", "91", "90", "86", "84", "82", "81", "66", "65", "64", "62", "61", "60", "58", "57", "56", "55", "54", "53", "52", "51", "49", "48", "47", "46", "45", "44", "43", "41", "40", "39", "36", "34", "33", "32", "31", "30", "27", "7", "1");
	var RegioCodesBE	= new Array("668", "665", "660", "659", "658", "657", "656", "655", "654", "653", "652", "651", "650", "649", "648", "647", "646", "645", "644", "643", "642", "641", "640", "633", "630", "629", "628", "627", "626", "625", "624", "623", "622", "621", "620", "619", "618", "617", "616", "615", "614", "612", "612", "611", "610", "499", "498", "497", "496", "495", "494", "488", "487", "486", "485", "484", "479", "478", "477", "476", "475", "474", "473", "472", "89", "87", "86", "85", "84", "83", "82", "81", "80", "76", "71", "70", "69", "68", "67", "65", "64", "63", "61", "60", "59", "58", "57", "56", "55", "54", "53", "52", "51", "50", "19", "16", "15", "14", "13", "12", "11", "10", "9", "4", "3", "2");
	var RegioCodesNL	= new Array("659", "658", "657", "656", "655", "654", "653", "652", "651", "650", "648", "647", "646", "645", "644", "642", "641", "640", "630", "629", "628", "627", "626", "625", "624", "622", "621", "620", "619", "618", "617", "616", "615", "614", "613", "612", "611", "610", "599", "598", "597", "596", "595", "594", "593", "592", "591", "578", "577", "575", "573", "572", "571", "570", "566", "562", "561", "548", "547", "546", "545", "544", "543", "541", "529", "528", "527", "525", "524", "523", "522", "521", "519", "518", "517", "516", "515", "514", "513", "512", "511", "499", "497", "495", "493", "492", "488", "487", "486", "485", "481", "478", "475", "418", "416", "413", "412", "411", "348", "347", "346", "345", "344", "343", "342", "341", "321", "320", "318", "317", "316", "315", "314", "313", "299", "297", "294", "255", "252", "251", "229", "228", "227", "226", "224", "223", "222", "187", "186", "184", "183", "182", "181", "180", "174", "172", "168", "167", "166", "165", "164", "162", "161", "118", "117", "115", "114", "113", "111", "79", "78", "77", "76", "75", "74", "73", "72", "71", "70", "58", "55", "53", "50", "46", "45", "43", "40", "38", "36", "35", "33", "30", "26", "24", "23", "20", "15", "14", "13", "10");
	var RegioCodesLU	= new Array("691", "661", "621", "84", "45");
	var RegioCodesAll	= new Array("691", "661", "659", "658", "657", "656", "655", "654", "653", "652", "651", "650", "648", "647", "646", "645", "644", "642", "641", "640", "630", "629", "628", "627", "626", "625", "624", "622", "621", "620", "619", "618", "617", "616", "615", "614", "613", "612", "611", "610", "599", "598", "597", "596", "595", "594", "593", "592", "591", "578", "577", "575", "573", "572", "571", "570", "566", "562", "561", "548", "547", "546", "545", "544", "543", "541", "529", "528", "527", "525", "524", "523", "522", "521", "519", "518", "517", "516", "515", "514", "513", "512", "511", "499", "498", "497", "496", "495", "494", "493", "492", "488", "487", "486", "485", "484", "481", "479", "478", "477", "476", "475", "474", "473", "472", "418", "416", "413", "412", "411", "348", "347", "346", "345", "344", "343", "342", "341", "321", "320", "318", "317", "316", "315", "314", "313", "299", "297", "294", "255", "252", "251", "229", "228", "227", "226", "224", "223", "222", "187", "186", "184", "183", "182", "181", "180", "174", "172", "168", "167", "166", "165", "164", "162", "161", "118", "117", "115", "114", "113", "111", "89", "87", "86", "85", "84", "83", "82", "81", "80", "79", "78", "77", "76", "75", "74", "73", "72", "71", "70", "69", "68", "67", "65", "64", "63", "61", "60", "59", "58", "57", "56", "55", "54", "53", "52", "51", "50", "46", "45", "43", "40", "38", "36", "35", "33", "30", "26", "24", "23", "20", "19", "16", "15", "14", "13", "12", "11", "10", "9", "4", "3", "2");
	var NrCountry, NrRegion, NrRest, NrRestPrefix, bFound;
	// Alle leestekens verwijderen
	var NummerIn = field.value;
	NummerIn = NummerIn.replace(/ /g,'');
	NummerIn = NummerIn.replace(/-/g,'');
	NummerIn = NummerIn.replace(/\./g,'');
	NummerIn = NummerIn.replace(/\(/g,'');
	NummerIn = NummerIn.replace(/\)/g,'');
	NummerIn = NummerIn.replace(/\//g,'');
	// Als het nummer begint met '+' of '00', dan is er een landcode meegegeven.
	NrCountry = "";
	bFound = false;
	if(NummerIn.substr(0,1)=="+" || NummerIn.substr(0,2)=="00")
	{
		for(var i=0; i<Landcodes.length && !bFound; i++) 
		{
			if(!bFound && (NummerIn.substr(1, Landcodes[i].length) == Landcodes[i] || NummerIn.substr(2, Landcodes[i].length) == Landcodes[i]))
			{
				NrCountry	= "+" + Landcodes[i];
				if(NummerIn.substr(0,1)=="+")
					NummerIn	= NummerIn.substr(1+Landcodes[i].length, NummerIn.length);
				else
					NummerIn	= NummerIn.substr(2+Landcodes[i].length, NummerIn.length);
				bFound = true;
				//if(bFound) continue;
			}
			//if(bFound) continue;
		}
	}
	// Regiocode opzoeken
	NrRegion = "";
	bFound = false;
	
	if(NummerIn.length > 2)
	{
		if(NrCountry == "")	// Géén lancode meegegeven, dus er moet een voorloopnul zijn
			if(NummerIn.substr(0,1) == "0") NummerIn = NummerIn.substr(1,NummerIn.length-1);
		var arrToUse = "";

		switch(NrCountry)
		{
			case "":
				//arrToUse = RegioCodesAll;	//RegioCodesNL.concat(RegioCodesBE).concat(RegioCodesLU);
				switch(_countryCode)
				{
					case "BE":
						arrToUse = RegioCodesBE;
						break;
					case "NL":
						arrToUse = RegioCodesNL;
						break;
					case "LU":
						arrToUse = RegioCodesLU;
						break;
					default:
						arrToUse = RegioCodesAll;
						break;
				}
				break;
			case "+31":
				arrToUse = RegioCodesNL;
				break;
			case "+32":
				arrToUse = RegioCodesBE;
				break;
			case "+352":
				arrToUse = RegioCodesLU;
				break;
		}
		if(arrToUse == "")
		{
			NrRegion = NummerIn.substr(0,2);
			NummerIn = NummerIn.substr(2, NummerIn.length-2);
		}
		else
		{
			for(var i=0; i<arrToUse.length && !bFound; i++) 
			{
				if(!bFound && NummerIn.substr(0, arrToUse[i].length) == arrToUse[i])
				{
					NrRegion	= arrToUse[i];
					NummerIn	= NummerIn.replace(NrRegion, "");
					bFound = true;
				}
			}
		}
	}
	// De rest van het nummer verdelen in groepjes van 2
	NrRest = NummerIn;
	NrRestPrefix = "";
	if(NrRegion.length == 1)
	{
		NrRestPrefix	= NrRest.substring(0, 4-NrRegion.length);
		NrRest  		= NrRest.substring(NrRestPrefix.length);
	}
	var rgx = /(\d{2})(\d)/;
	while (rgx.test(NrRest))
		NrRest = NrRest.replace(rgx, '$1' + '.' + '$2');
	// Geformatteerde nummer opbouwen
	var strOut = "";
	if(NrCountry != "")
		strOut +=  "(" + NrCountry + ") ";
	else 
		strOut += "0";
		
	if(NrRegion != "")
		strOut += NrRegion;
	
	if(NrRestPrefix != "")
		strOut += " / " + NrRestPrefix;
		
	if(NrRest != "")
		strOut += (NrRestPrefix == "" ? " / " : ".") + NrRest;

	field.value = strOut;
	doSetCaretPosition(field, strOut.length); // Mac Safari fix; cursor naar laatste positie verplaatsen
}
function formatInitials(e)
{
	// If anything but backspace is pressed
    if (e.keyCode != 8) {
		// Gebruik; <INPUT ... onKeyUp="formatInitials(event)" />
		if (e == null) e = window.event;
		var field = null;
		if (e.target) field = e.target;
		else if (e.srcElement) field = e.srcElement;
		try {
			if (field.nodeType == 3) // defeat Safari bug
				field = field.parentNode;
		} catch(ex) {}
		var strInitials = field.value.replace(/\./g, '').replace(/ /g, '').toUpperCase();
		var strOutput = "";
		for(i=0; i<strInitials.length; i++)
			strOutput += strInitials.substr(i,1)+".";
		field.value = strOutput;
		doSetCaretPosition(field, strOutput.length); // Mac Safari fix; cursor naar laatste positie verplaatsen
	}
}
function formatZipCode(e)
{
	// Gebruik; <INPUT ...  onKeyPress="return isNumberKey(event);" />
	if (e == null) e = window.event;
	var field = null;
	if (e.target) field = e.target;
	else if (e.srcElement) field = e.srcElement;
	try {
		if (field.nodeType == 3) // defeat Safari bug
			field = field.parentNode;
	} catch(ex) {}
	field.value = field.value.toUpperCase();
	var charCode = (e.which) ? e.which : e.keyCode;
	if(field.value.length < 4)
	{
		if (charCode > 31 && (charCode < 48 || charCode > 57))
		{
			if (e.stopPropagation) {
					e.stopPropagation();
					e.preventDefault();
			}
			if(_isIE) {
				e.cancelBubble = true;
				e.returnValue = false;
			}
			return false;
		}
	}
	else
	{
		if(_countryCode == "BE")
			return true;
		if((charCode == 8 || (charCode>=37 && charCode<=40) || charCode == 46 || (charCode>=65 && charCode<=90) || (charCode>=97 && charCode<=122)) == false)
		{
			if (e.stopPropagation) {
					e.stopPropagation();
					e.preventDefault();
			}
			if(_isIE) {
				e.cancelBubble = true;
				e.returnValue = false;
			}
			return false;
		}
	}
	return true;
}
function toUppercase(e)
{
	if (e == null) e = window.event;
	var field = null;
	if (e.target) field = e.target;
	else if (e.srcElement) field = e.srcElement;
	try {
		if (field.nodeType == 3) // defeat Safari bug
			field = field.parentNode;
	} catch(ex) {}
	field.value = field.value.toUpperCase();
}
// === Afhandeling van errors ============================ 
function findRow(elementName)
{
	var x = document.getElementById(elementName);
	if(!x)
		return;
	while(x.tagName.toUpperCase()!="DIV" && x.tagName.toUpperCase()!="BODY")
		x = x.parentNode;
	return x;
}
function findSpanInRow(row)
{
	var span = row.getElementsByTagName("span")[0];
	if(!span) 
		span = row.parentNode.getElementsByTagName("span")[0];
	return span;
}
function ParseErrors(strError)
{
	var errStr = "";
	var row, span;
	
	if(strError!="")
	{
		strError = strError.replace("'","&acute;");
		var names = strError.split("<BR>");
		for(i=0;i<names.length-1;i++)
		{
			if(names[i]!="")
			{
				if(firstErrorField == null) firstErrorField = getEl(names[i]);
				var row = findRow(names[i]);
				if(row)
				{
					row.className = row.className.replace("error","")+" error";
					span = findSpanInRow(row);
					if(span) 
						errStr += "&nbsp; &nbsp; &nbsp; &bull; "+span.innerHTML+"<br>";
					else
						if(_bDebug) window.status = "No span found for "+names[i];
				}
				else
				{
					if(names[i].indexOf("|")>0)
					{
						var arr = names[i].split("|");
						for(j=0;j<arr.length-1;j++)
						{
							row = findRow(arr[j]);
							if(row)
							{
								row.className = row.className.replace("error","")+" error";
								span = findSpanInRow(row);
							}
						}
						if(span) 
							errStr += "&nbsp; &nbsp; &nbsp; &bull; "+span.innerHTML+"<br>";
						else
							if(_bDebug) window.status = "No span found for "+names[i];
					}
					else
						errStr += "&bull; "+names[i]+"<br>";
				}
			}
		}
		if(errStr!="" && getEl("customErrors"))
			getEl("customErrors").innerHTML = errStr;

		if(errStr!="")
		{
			if(getEl("divError"))
			{
				getEl("divError").className = "errorbox visible";
				getEl("divError").style.display = "block";
			}
			if(firstErrorField)
				firstErrorField.focus();
		}
		else
			if(getEl("divError")) getEl("divError").className = "hidden";
	}
}
// =======================================================
function CreateDropdown(elementName, startVal, endVal, defaultValue, step, dummy) 
{
	CreateDropdown2(elementName, startVal, endVal, defaultValue, step, dummy, "");
}
function CreateDropdown2(elementName, startVal, endVal, defaultValue, step, dummy, attributes) 
{
	if(typeof(elementName)=="undefined")
		return "- Error - no elementName defined -";
	if(typeof(startVal)=="undefined")
		startVal=1;
	if(typeof(endVal)=="undefined")
		endVal = 10;
	if(typeof(step)=="undefined")
		step=1;
	if(typeof(defaultValue)=="undefined")
		defaultValue = "";
	if(typeof(dummy)=="undefined")
		dummy = true;

	step = Math.abs(step);

	sReturn = "";
	sReturn += "<select id='"+elementName+"' name='"+elementName+"' "+attributes+">\n";
	if(dummy)
		sReturn += "	<option value='' selected='selected'>-</option>\n";
	if(startVal<=endVal)
	{
		for(i=startVal;i<=endVal;i+=step)
		{
			if(i<10)
				j="0"+i;
			else
				j=i;
			if(i==defaultValue)
				sReturn += "	<option selected='selected' value='"+j+"'>"+j+"</option>\n";
			else
				sReturn += "	<option value='"+j+"'>"+j+"</option>\n";
		}
	}
	else
	{
		for(i=startVal;i>=endVal;i-=step)
		{
			if(i<10)
				j="0"+i;
			else
				j=i;
			if(i==defaultValue)
				sReturn += "	<option selected='selected' value='"+j+"'>"+j+"</option>\n";
			else
				sReturn += "	<option value='"+j+"'>"+j+"</option>\n";
		}
	}
	sReturn += "</select>\n";
	out(sReturn);
}
function CreateArrayDropdown(elementName, elements, defaultValue, dummy) 
{
	CreateArrayDropdown2(elementName, elements, defaultValue, dummy, "");
}
function CreateArrayDropdown2(elementName, elements, defaultValue, dummy, attributes) 
{
	if(typeof(elementName)=="undefined")
		return "- Error - no elementName defined -";
	if(typeof(elements)=="undefined")
		return "- Error - no elements defined -";
	if(typeof(defaultValue)=="undefined")
		defaultValue = "";
	if(typeof(dummy)=="undefined")
		dummy = true;
	
	var arrElements = elements.split(",");
	
	sReturn = "";
	sReturn += "<select id='"+elementName+"' name='"+elementName+"' "+attributes+">\n";
	if(dummy)
		sReturn += "	<option value='' selected='selected'>-</option>\n";
	for(i=0;i<=arrElements.length/2;i+=2)
		if(arrElements[i]==defaultValue)
			sReturn += "	<option selected='selected' value='"+arrElements[i+1]+"'>"+arrElements[i]+"</option>\n";
		else
			sReturn += "	<option value='"+arrElements[i+1]+"'>"+arrElements[i]+"</option>\n";
	sReturn += "</select>\n";
	out(sReturn);
}
function checkLength(textarea, maxLength) { 
	  if (textarea.value.length > maxLength){ 
			textarea.value = textarea.value.substring(0,maxLength); 
			//alert("Text too long. Must be "+maxLength+" characters or less"); 
			return false; 
	  } 
	  return true; 
} 
function isNumberOnlyKey(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode
	if (charCode > 31 && (charCode < 48 || charCode > 57))
	{
		return false;
	}
	
	return true;
}
// === Dynamische voorgedefinieerde velden ===============
// De velden zelf zitten gedefinieerd in LABELS in Messagent op de Namespace "Common".
Date.prototype.add = function (sInterval, iNum)
{
  var dTemp = this;
  if (!sInterval || iNum == 0) return dTemp;
  switch (sInterval.toLowerCase()){
    case "ms":	// Milliseconden
      dTemp.setMilliseconds(dTemp.getMilliseconds() + iNum);
      break;
    case "s":	// Seconden
      dTemp.setSeconds(dTemp.getSeconds() + iNum);
      break;
    case "mi":	// Minuten
      dTemp.setMinutes(dTemp.getMinutes() + iNum);
      break;
    case "h":	// Uren
      dTemp.setHours(dTemp.getHours() + iNum);
      break;
    case "d":	// Dagen
      dTemp.setDate(dTemp.getDate() + iNum);
      break;
    case "w":	// Weken
      dTemp.setDate(dTemp.getDate() + (7*iNum));
      break;
    case "m":	// Maanden
      dTemp.setMonth(dTemp.getMonth() + iNum);
      break;
    case "y":	// Jaren
      dTemp.setFullYear(dTemp.getFullYear() + iNum);
      break;
  }
  return dTemp;
}
function CreateCarErd(lang, defaultVal)
{
	lang = lang.substr(lang.length-2, 2);
	var arrMaand;
	if(lang != "NL" && lang != "FR") lang = "NL";
	switch(lang)
	{
		case "FR":
			arrMaand = new Array("janvier",'f\351vrier',"mars","avril","mai","juin","juillet",'ao\373t',"septembre","octobre","novembre",'d\351cembre');
			break;
		default:
			arrMaand = new Array("januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december");
			break;
	}
	var curDate = new Date();
	var sSelected = "";
	var sReturn   = "<select id='CAR_ERD' name='CAR_ERD' style='text-align:right'>\n";
	
	if(""+defaultVal == "")
		sReturn += "	<option value='' selected='selected'>-</option>\n";
	else
		sReturn += "	<option value=''>-</option>\n";
	
	for(i=1; i<=60; i++)	// 60 maanden
	{
		
		var curMonth	= (curDate.getMonth()+1) < 10 ? "0" + (curDate.getMonth()+1) : curDate.getMonth()+1;
		var curYear		= curDate.getFullYear();

		if(curMonth+curYear == defaultVal)
			sSelected = " selected='selected'";
		else
			sSelected = "";

		sReturn += "	<option " + sSelected + " value='" + curMonth+curYear + "'>" + arrMaand[parseInt(curMonth,10)-1] + " " + curYear + " </option>\n";
		curDate.add("m", 1);
	}
	sReturn += "</select>\n";
	out(sReturn);
}
function CreateBirthday(defaultDay, defaultMonth, defaultYear)
{
	var ddAttributes = 'onChange="CheckDateValidity(\'_BIRTHDATE0\', \'_BIRTHDATE1\', \'_BIRTHDATE2\')\"';
	var curDate = new Date();
	CreateDropdown2("_BIRTHDATE0", 31, 1, defaultDay, -1, 1, ddAttributes)
	CreateDropdown2("_BIRTHDATE1", 12, 1, defaultMonth, -1, 1, ddAttributes)
	CreateDropdown2("_BIRTHDATE2", curDate.getFullYear()-18, 1921, defaultYear, -1, 1, ddAttributes)
}
function CheckDateValidity(dayFieldID, monthFieldID, yearFieldID)
{
	// Deze functie zorgt ervoor dat er geen ongeldige datum geselecteerd kan worden.
	// Zal bij een slechte datum automatisch een juiste datum selecteren.
	var chkDate;
	var fDay	= getEl(dayFieldID);
	var fMonth	= getEl(monthFieldID);
	var fYear	= getEl(yearFieldID);
	var sDay, sMonth, sYear;
	
	if(!fDay || !fMonth || !fYear)
	{
		alert("velden niet gevonden");
		return;
	}
	else
	{
		if(fDay.selectedIndex <= 0 || fMonth.selectedIndex <= 0 || fYear.selectedIndex <= 0)
			return;
		else
		{
			sDay	= fDay.options[fDay.selectedIndex].value;
			sMonth	= parseInt(fMonth.options[fMonth.selectedIndex].value)-1;
			sYear	= fYear.options[fYear.selectedIndex].value;
		
			chkDate = new Date(sYear, sMonth, sDay);	// js zet per default om naar een geldige datum, dus we stellen deze dingen in op de dropdowns; zo is er altijd een juiste datum geselecteerd
			//chkDate = new Date();
			//chkDate.setFullYear(sYear, sMonth, sDay);
			fDay.value		= chkDate.getDate() < 10 ? "0" + chkDate.getDate() : chkDate.getDate();
			fMonth.value	= (chkDate.getMonth()+1) < 10 ? "0" + (chkDate.getMonth()+1) : (chkDate.getMonth()+1);
			fYear.value		= chkDate.getFullYear();
		}
	}
}
function formatBirthDate()
{
	fldDT1 = getEl("PERS_BIRTH_DATE");
	fldDT2 = getEl("__MA_PERS_BIRTH_DATE");
	_d = fldDT1.value.substr(2, 2);
	_m = fldDT1.value.substr(0, 2);
	_y = fldDT1.value.substr(4, 4);
	fldDT2.value = _d + "/" + _m + "/" + _y;	
}
function createNamedElement(type, name)
{
	var element = null;
	var bIEbug = true;
	// Try the IE way; this fails on standards-compliant browsers
	try {
		element = document.createElement('<'+type+' name="'+name+'" id="'+name.replace(".","_")+'" />');
	} catch (e) {
		bIEbug = false;
	}
	if (!element || element.nodeName != type.toUpperCase()) {
		// Non-IE browser; use canonical method to create named element
		element = document.createElement(type);
		element.name = name;
		element.id	 = name.replace(".","_");
	}
	return element;
}
function CheckGenderField()
{
	//als er een veld PERS_SALUTATION (aanpreking) aanwezig is, maar géén PERS_GENDER (geslacht), dan voegen we gender automatisch toe, mèt events op aanspreking
	if(!document.forms[0])
	{
		window.status = "no form found";
		return;
	}
	if(!getEl("PERS_GENDER") && getEl("PERS_SALUTATION"))
	{
		var tmpelem = createNamedElement("input", "PERS_GENDER");
		tmpelem.setAttribute("type", "hidden");
		document.forms[0].appendChild(tmpelem);
		__addEvent("PERS_SALUTATION", "change", setGenderFromSalutation);	
	}	_setGenderFromSalutation(getEl("PERS_GENDER"), getEl("PERS_SALUTATION"));

	if(!getEl("EZINE_GENDER") && getEl("EZINE_SALUTATION"))
	{
		var tmpelem = createNamedElement("input", "EZINE.GENDER");
		tmpelem.setAttribute("type", "hidden");
		document.forms[0].appendChild(tmpelem);
		__addEvent("EZINE_GENDER", "change", setGenderFromSalutation);	
		_setGenderFromSalutation(getEl("EZINE_GENDER"), getEl("EZINE_SALUTATION"));
	}
}
function setGenderFromSalutation(e)
{
	_setGenderFromSalutation(getEl("PERS_GENDER"), getEl("PERS_SALUTATION"));
	_setGenderFromSalutation(getEl("EZINE_GENDER"), getEl("EZINE_SALUTATION"));
}
function _setGenderFromSalutation(genderField, salutationField)
{
	if(genderField && salutationField)
	{
		if(salutationField.value == "MR")
			genderField.value = "M";
		else if(salutationField.value == "MRS" || salutationField.value == "MSS")
			genderField.value = "F";
	}
}
function SetFocusToFirstField()
{
	var form = document.forms[0];
	var element;
	// het zoekveld heeft className "form-textfield"; deze mag de focus niet krijgen
	
	for(i=0; i < form.elements.length; i++)
	{
		element = form.elements[i];
		// Go only to non hidden field
		if( element.type != "hidden" && element.type != "submit" && element.type != "button" && element.className != "form-textfield" && element.name != "" && element.name)// type = select-one
		{
			element.focus();
			break;
		}
		else
			continue;
	}
}
function checkDebugState()
{
	// Debug-info activeren?
	var qs = location.search.substring(1, location.search.length);
	if (qs.length == 0) return;
	if(qs.indexOf("MA_DEBUG=1") < 0)
		_bDebug = false;
	else
		_bDebug = true;
}
function LoadCalendarScript()
{
	AppendScript("datepickerGM.js");
}
function LoadDealerLocatorScript()
{
	AppendScript("dealerlocator.js");
}
function AppendScript(filename)
{
	var script  	= document.createElement('script');
	script.type 	= "text/javascript";
	script.language	= "javascript"
	script.src  	= "http://gm.emsecure.net/webservices/"+filename;
	document.getElementsByTagName('head')[0].appendChild(script);
	script  = null;
}
function disableMe(e)
{
	if (e == null) e = window.event;
	var button = null;
	if (e.target) button = e.target;
	else if (e.srcElement) button = e.srcElement;
	try {
		if (button.nodeType == 3) // defeat Safari bug
			button = button.parentNode;
	} catch(ex) {}
	button.disabled = true;
	document.forms[0].submit();
}
function fixRadiosAndCheckboxes() 
{
	var form = document.forms[0];
	var element;
	for(i=0; i < form.elements.length; i++)
	{
		element = form.elements[i];
		
		if(element.type == "radio" && (element.className == "" || element.className.indexOf("radio")<0))
			element.className += " radio";
		else if(element.type == "checkbox" && (element.className == "" || element.className.indexOf("checkbox")<0))
			element.className += " checkbox";
	}
	form = null;
	element = null;
}
String.prototype.toProperCase = function()
{
  return this.toLowerCase().replace(/^(.)|\s(.)|-(.)|&(.)/g, 
      function($1) { return $1.toUpperCase(); });
}
// =======================================================
function InitMessagentForm()
{
	checkDebugState();	// als "MA_DEBUG=1" in de url zit, dan extra debug-info in de windows-statusbalk tonen
	detectCountry();

	fixRadiosAndCheckboxes();

	LoadCalendarScript();
	LoadDealerLocatorScript();

	if (document.addEventListener)			// Firefox en consoorten
		setMessagentSettings();
	else
		window.onload = setMessagentSettings;	// IE
}
function setMessagentSettings()
{
	CheckGenderField();
	
	// Automatisch algemene events toevoegen aan de standaard messagent velden
	__addEvent("PERS_INITIALS",			"keyup",	formatInitials);
	__addEvent("PERS_HOUSE_NR",			"keypress",	isNumberKey);
	__addEvent("PERS_TEL_HOME",			"keypress",	isNumberKey);
	__addEvent("PERS_TEL_MOBILE",		"keypress",	isNumberKey);
	__addEvent("PERS_TEL_WORK",			"keypress",	isNumberKey);
	//__addEvent("PERS_TEL_HOME",			"keyup",	formatPhoneNumber);
	//__addEvent("PERS_TEL_MOBILE",		"keyup",	formatPhoneNumber);
	//__addEvent("PERS_TEL_WORK",			"keyup",	formatPhoneNumber);
	__addEvent("PERS_POSTAL_CODE",		"keypress",	formatZipCode);
	__addEvent("PERS_POSTAL_CODE",		"keyup",	toUppercase);
	__addEvent("MA_SUBMIT",				"click",	disableMe);
	//__addEvent("PERS_SALUTATION",		"blur",		setGenderFromSalutation);
	__addEvent("PERS_SALUTATION",		"click",	setGenderFromSalutation);

	__addEvent("EZINE_PERS_INITIALS",	"keyup",	formatInitials);
	__addEvent("EZINE_NUMBER",			"keypress",	isNumberKey);
	__addEvent("EZINE_TEL_HOME",		"keypress",	isNumberKey);
	__addEvent("EZINE_TEL_MOBILE",		"keypress",	isNumberKey);
	__addEvent("EZINE_TEL_WORK",		"keypress",	isNumberKey);
	__addEvent("EZINE_TEL_HOME",		"keyup",	formatPhoneNumber);
	__addEvent("EZINE_TEL_MOBILE",		"keyup",	formatPhoneNumber);
	__addEvent("EZINE_TEL_WORK",		"keyup",	formatPhoneNumber);
	__addEvent("EZINE_POSTAL_CODE",		"keypress",	formatZipCode);
	__addEvent("EZINE_POSTAL_CODE",		"keyup",	toUppercase);
	//__addEvent("EZINE_SALUTATION",		"blur",		setGenderFromSalutation);
	__addEvent("EZINE_SALUTATION",		"click",	setGenderFromSalutation);
		
	if(firstErrorField == null) 
		SetFocusToFirstField();
	else
		firstErrorField.focus();
}