
function updatePrice()
{
	//-----
	//	Pakket
	//-----
	var pakketOpties = document.getElementsByName('pakket');
	var pakketKeuze = -1;
	for( var p = 0; p < pakketOpties.length; p++ )
	{
		if( pakketOpties[ p ].checked )
		{
			pakketKeuze = pakketOpties[ p ].value;
			break;
		}
	}
	
	//alert( pakketKeuze );
	
	var pakket;
	
	if( pakketKeuze == -1 )
	{
		pakket = new Array();
		pakket['name'] = 'Geen pakket geselecteerd.';
		pakket['price'] = 0;
		pakket['id'] = -1;
	}
	else
	{
		pakket = mod_bestel_pakketten[ pakketKeuze ];
	}
	
	//-----
	//	Domein
	//-----
	var domeinnaam = document.getElementById('domein');
	if( domeinnaam.value != '' )
	{
		if( domeinnaam.value.length < 2 )
		{
			alert("Domeinnamen moeten minimaal 2 tekens lang zijn!");
			domeinnaam.focus();
			return false;
		}
		else
		{
			var domeinTest = new RegExp("[^a-z0-9\-]","i");
			//alert( domeinTest.test( domeinnaam.value ) );
			if( domeinTest.test( domeinnaam.value ) )
			{
				alert("Domeinnamen mogen alleen letters, cijfers en koppeltekens (-) bevatten!");
				domeinnaam.value = '';
				domeinnaam.focus();
			}
		}
	}
	
	
	if( document.getElementById('tld_costs') != undefined )
	{
		var tld = new Array();
		tld['price'] = document.getElementById('tld_costs').value;
	}
	else
	{
		var tld = mod_bestel_tlds[ document.getElementById('tld').selectedIndex ];
		
		document.getElementById('domainPriceEx').innerHTML = num2money( tld['price'] );
		document.getElementById('domainPriceInc').innerHTML = num2money( tld['price'] * 1.19 );	
	}
		
	var totalPrice = parseFloat( tld['price'] ) + parseFloat( pakket['price'] );
	document.getElementById('totalPriceEx').innerHTML = num2money( totalPrice );
	document.getElementById('totalPriceInc').innerHTML = num2money( totalPrice * 1.19 );
}

function differentDomain()
{
	//	Set 'domainIsOwned' to no.
	//	Unset domain
	//	Submit the form.
	document.getElementById('domainIsOwned').value='no';
	document.getElementById('domein').value='';
	document.getElementById('mod_bestel_domainform').submit();
}

function mod_bestel_updateBedrijfsinfo()
{
	if( document.getElementById('bedrijf-ja').checked == true )
	{
		/*
			IE is unable to deal with the table-row display type.
		*/
		var tableRow = 'table-row';
		if( navigator.appName == 'Microsoft Internet Explorer' )
		{
			tableRow = 'block';
		}

		document.getElementById('bedrijfsinfo_naam').style.display = tableRow;
		document.getElementById('bedrijfsinfo_kvk').style.display = tableRow;
		document.getElementById('bedrijfsinfo_rechtsvorm').style.display = tableRow;
	}
	else
	{
		document.getElementById('bedrijfsinfo_naam').style.display = 'none';
		document.getElementById('bedrijfsinfo_kvk').style.display = 'none';
		document.getElementById('bedrijfsinfo_rechtsvorm').style.display = 'none';
	}
}

function mod_bestel_valideer()
{
	//	Is it a company?	
	if( document.getElementById('bedrijf-ja').checked == true )
	{
		if( document.getElementById('bedrijfsnaam').value == '' )
		{
			alert('Als u deze bestelling voor een bedrijf doet, bent u verplicht de naam van dit bedrijf in te voeren.');
			document.getElementById('bedrijfsnaam').focus();
			return false;
		}

		if( document.getElementById('kvk').value == '' && rechtsvormen[ document.getElementById('rechtsvorm').options[ document.getElementById('rechtsvorm').selectedIndex ].value ] )
		{
			alert('Bij de door u gekozen rechtsvorm, bent u verplicht het KvK registratienummer in te voeren..');
			document.getElementById('kvk').focus();
			return false;
		}
	}
	
	if( document.getElementById('voorletters').value == '' )
	{
		alert('U bent verplicht uw voorletter(s) in te voeren.');
		document.getElementById('voorletters').focus();
		return false;
	}
	else
	{
		var voorletters = document.getElementById('voorletters');
		var voorlettersCheck = new RegExp("[^a-z]","i");
		if( voorlettersCheck.test( voorletters.value ) )
		{
			alert('Uw voorletters mogen alleen letters zijn.');
			voorletters.value.replace( voorlettersCheck, "" );
			voorletters.focus();
			return false;
		}
	}
	
	if( document.getElementById('achternaam').value == '' )
	{
		alert('U bent verplicht uw achternaam in te voeren.');
		document.getElementById('achternaam').focus();
		return false;
	}
	else
	{
		var achternaam = document.getElementById('achternaam');
		var achternaamCheck = new RegExp("[^a-z\s]","i");
		if( achternaamCheck.test( achternaam.value ) )
		{
			alert('Uw achternaam mag alleen letters zijn.');
			achternaam.value.replace( achternaamCheck, "" );
			achternaam.focus();
			return false;
		}
	}	
	
	if( document.getElementById('straat').value == '' )
	{
		alert('U bent verplicht uw straat in te voeren.');
		document.getElementById('straat').focus();
		return false;
	}
	
	if( document.getElementById('huisnummer').value == '' )
	{
		alert('U bent verplicht uw huisnummer in te voeren.');
		document.getElementById('huisnummer').focus();
		return false;
	}
	
	if( document.getElementById('postcode').value == '' )
	{
		alert('U bent verplicht uw postcode in te voeren.');
		document.getElementById('postcode').focus();
		return false;
	}
	
	if( document.getElementById('woonplaats').value == '' )
	{
		alert('U bent verplicht uw woonplaats in te voeren.');
		document.getElementById('woonplaats').focus();
		return false;
	}
	
	if( document.getElementById('email').value == '' )
	{
		alert('U bent verplicht uw email adres in te voeren.');
		document.getElementById('email').focus();
		return false;
	}
	else
	{
		var emailRegexp = /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i;
		if( ! emailRegexp.test( document.getElementById('email').value ) )
		{
			alert('Het opgegeven email adres is ongeldig.');
			document.getElementById('email').focus();
			return false;
		}
	}
	/*
	else if( ! validateEmailAddress( document.getElementById('email').value ) )
	{
		alert('Het opgegeven email adres is ongeldig.');
		document.getElementById('email').focus();
		return false;		
	}
	*/
	
	if( document.getElementById('telefoon').value == '' )
	{
		alert('U bent verplicht uw telefoon nummer in te voeren.');
		document.getElementById('telefoon').focus();
		return false;
	}
	
	return true;
}

var mod_bestel_validateEmailAddress_success = false;
function validateEmailAddress( email )
{
	var serverData = false;
	mod_bestel_validateEmailAddress_success = false;

	if (window.XMLHttpRequest)
	{
		serverData = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		serverData = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if (serverData)
	{
		serverData.open('GET','/mod_bestel/emailcheck.php?address=' + email );
		serverData.onreadystatechange = function()
		{
			if (serverData.readyState == 4 && serverData.status == 200 )
			{
				if( serverData.responseText == 1 || serverData.responseText == '1' )
				{
					mod_bestel_validateEmailAddress_success = true;
					//alert('success!');
				}
			}
		}
		serverData.send(null);
	}
	else
	{
		//alert("Uw browser bied geen ondersteuning voor het opvragen van beschikbaarbeid van domeinnamen. (Geen XMLHttpRequest support)");
		mod_bestel_validateEmailAddress_success = true;
	}
	//sleep( 0.5 );
	pause( 300 );
	//alert(mod_bestel_validateEmailAddress_success);
	return mod_bestel_validateEmailAddress_success;	
}

function checkConditionAgreement( sidn )
{	
	var errormsg = "";
	if( document.getElementById('agree_huizinga').checked == false )
	{
		errormsg = errormsg + "U moet accoord gaan met de algemene voorwaarden van Huizinga Hosting & Webdesign.\n";
	}
	if( sidn && document.getElementById('agree_sidn').checked == false )
	{
		errormsg = errormsg + "U moet accoord gaan met het regelement van de SIDN om een .nl domeinnaam te kunnen registreren.\n";
	}
	
	if( document.getElementById('betaal_methode_ideal').checked )
	{
		if( document.getElementById('betaal_methode_bank').selectedIndex == 0 )
		{
			errormsg = errormsg + "Voor betalingen met iDeal, moet u uw bank kiezen.\n";
		}
	}
	
	if( errormsg.length > 0 )
	{
		alert( errormsg );
		return false;
	}
	return true;
}

function checkOptions()
{
	var optionsPrice = 0;
	for( var cOption = 0; cOption < mod_bestel_opties.length; cOption++ )
	{
		if( document.getElementById( 'o-' + mod_bestel_opties[cOption][0] ).checked )
		{
			optionsPrice = optionsPrice + mod_bestel_opties[cOption][2];
			for( var cDependancy = 0; cDependancy < mod_bestel_opties[cOption][3].length; cDependancy++ )
			{
				if( ! document.getElementById( 'o-' + mod_bestel_opties[cOption][3][cDependancy] ).checked )
				{
					//alert("Option should be checked but is not, ID:" + mod_bestel_opties[cOption][3][cDependancy]);
					//	Check it.
					document.getElementById( 'o-' + mod_bestel_opties[cOption][3][cDependancy] ).checked = true;
					for( var cCheck = 0; cCheck < mod_bestel_opties.length; cCheck++ )
					{
						/*
						alert("Checking dependancy:"+
							  	"\nID of required option = " + mod_bestel_opties[cOption][3][cDependancy] + 
								"\nIndex of required option = " + cDependancy + 
								"\nID of checking option = " + mod_bestel_opties[cCheck][0] + 
								"\nIndex of checking option = " + cCheck);
						*/
						if( mod_bestel_opties[cCheck][0] == mod_bestel_opties[cOption][3][cDependancy] )
						{
							alert( "De opties '" + mod_bestel_opties[cCheck][1] + "' vereist dat u ook optie '" +  mod_bestel_opties[cOption][1] + "' neemt!" );
							optionsPrice = optionsPrice + mod_bestel_opties[cCheck][2];
							break;
						}
					}
				}
			}
		}
	}
	
	var totalPrice = priceForPackageAndDomain + optionsPrice;
	document.getElementById('totalPriceEx').innerHTML = num2money( totalPrice );
	document.getElementById('totalPriceInc').innerHTML = num2money( totalPrice * 1.19 );
}

function num2money(n_value) {

	// validate input
	if (isNaN(Number(n_value)))
		return 'ERROR';

	// save the sign
	var b_negative = Boolean(n_value < 0);
	n_value = Math.abs(n_value);
	
	// round to 1/100 precision, add ending zeroes if needed
	var s_result = String(Math.round(n_value*1e2)%1e2 + '00').substring(0,2);

	// separate all orders
	var b_first = true;
	var s_subresult;
	while (n_value >= 1) {
		s_subresult = (n_value >= 1e3 ? '00' : '') + Math.floor(n_value%1e3);
		s_result = s_subresult.slice(-3) + (b_first ? ',' : ',') + s_result;
		b_first = false;
		n_value = n_value/1e3;
	}
	// add at least one integer digit
	if (b_first)
		s_result = '0.' + s_result;
	
	// apply formatting and return
	return  b_negative
		? '(' + s_result + ')'
		: '' + s_result;
}

function sleep( naptime )
{
	naptime = naptime * 1000;
	var sleeping = true;
	var now = new Date();
	var alarm;
	var startingMSeconds = now.getTime();
	while(sleeping)
	{
		alarm = new Date();
		alarmMSeconds = alarm.getTime();
		if(alarmMSeconds - startingMSeconds > naptime)
		{
			sleeping = false;
		}
	}
}

/**
*@description pause( iMilliseconds ) Cause the single Javascript thread to hald/pause/sleep/wait for a specified period of time, by opening in modalDialog window (IE only) that modally locks the browser until it returns.  This modal dialog is not opened to any page, but uses the Javascript: protocol to execute a javascript setTimeout.  In this modal context the setTimeout, has the desired affect of preventing any other script execution.  The sole purpose of the timeout execution script is to close the modal dialog which will return control/unluck the browser.  The intention was to find a way to allow the UI to be updated and rendered in the middle of function/method without the need to split the method up, remove nested calls, or use closures.  Used in this fashion to update the UI, a 0 (zero) is usually passed (or optionally omitted altogether) so that the only delay is for the UI to render.
*@version Note Please be aware that the user interface WILL update its rendering (if you've made and DOM/CSS/Text changes they will appear) and this may significantly slow down program execution if looping.
*@keywords pause sleep wait halt javascript show modal dialog set timeout multi-threaded single thread
*@version 1.2
* @param {Object} iMilliseconds [optional] the number of milliseconds the code will pause before returning - If no value is passed the code will returned immediately (as if a 0 were passed)
* @return undefined  there is no return value from this function
*/
function pause( iMilliseconds )
{
    var sDialogScript = 'window.setTimeout( function () { window.close(); }, ' + iMilliseconds + ');';
    window.showModalDialog('javascript:document.writeln ("<script>' + sDialogScript + '<' + '/script>")');
}

/*
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}
*/
