//Keer selectie om / Alles (de)selecteren (checkboxes)
function changeCheckbox(f, checked) 
{
	for (i=0; i < f.elements.length; i++) 
	{
		if (f.elements[i].type == "checkbox")
		{
			if (checked == true || checked == false)
			{
				f.elements[i].checked = checked;
			}
			else 
			{
				f.elements[i].checked = !f.elements[i].checked;
			}
		}
	}
}
/* Maak van eerste letter een hoofdletter */
function uppercaseFirst (field)
{
   field.value = field.value.substr(0, 1).toUpperCase() + field.value.substr(1);
}
/* Maak van alle letters hoofdletters */
function uppercaseAll (field)
{
	field.value=field.value.toUpperCase();
}
/* Maak van alle letters kleine letters */
function lowercaseAll (field)
{
	field.value=field.value.toLowerCase();
}
/* Vervang karakters */
function replaceChar (field, replaceChar, replaceBy)
{
	field.value=field.value.replace(replaceChar, replaceBy);
}
/* Spring naar volgende veld wanneer aantal tekens bereikt is */
function jumpToField (field, jumpTo, num, keyCode)
{
	if (keyCode != 9 && keyCode != 16) 
	{
		if (field.value.length>=num)
		{
			document.getElementById(jumpTo).focus();
		}
	}
}
/* Kijk of het opgegeven veld niet leeg is en of de lengte van de string hoger is dan de opgegeven waarde */
function validate_required (field,num,alerttxt)
{
	with (field)
	{
		if (value==null||value==""||(value.length<num&&num>0))
		{
			alert(alerttxt);
			field.focus();
			field.style.borderBottom = '2px solid #E45303';
			return false;
		}
		else
		{
			field.style.borderBottom = '1px solid #99CECE';
			return true;
		}
	}
}
/* Controleer emailadres op geldigheid */
function validate_email(field,alerttxt)
{
	with (field)
	{
		apos=value.indexOf("@");
		dotpos=value.lastIndexOf(".");
		if (apos<1||dotpos-apos<2||value.length<(dotpos+3)) 
		{
			alert(alerttxt);
			field.focus();
			field.style.borderBottom = '2px solid #E45303';
			return false;
		}
		else
		{
			field.style.borderBottom = '1px solid #99CECE';
			return true;
		}
	}
}
/* Kijk of het opgegeven veld niet leeg is en of de lengte van de string hoger is dan de opgegeven waarde */
function validate_compare (field1,field2,alerttxt)
{
	with (field1)
	{
		if (value != field2.value)
		{
			alert(alerttxt);
            value='';
            field2.value='';
			field1.focus();
			field1.style.borderBottom = '2px solid #E45303';
			return false;
		}
		else
		{
			field.style.borderBottom = '1px solid #99CECE';
			return true;
		}
	}
}
/* ************************************************************
Created: 20060120
Author:  Steve Moitozo <god at zilla dot us> -- geekwisdom.com
Description: This is a quick and dirty password quality meter 
	 written in JavaScript so that the password does 
	 not pass over the network.
License: MIT License (see below)
Modified: 20060620 - added MIT License
Modified: 20061111 - corrected regex for letters and numbers
				 Thanks to Zack Smith -- zacksmithdesign.com
---------------------------------------------------------------
Copyright (c) 2006 Steve Moitozo <god at zilla dot us>

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without 
restriction, including without limitation the rights to use, 
copy, modify, merge, publish, distribute, sublicense, and/or 
sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following 
conditions:

The above copyright notice and this permission notice shall 
be included in all copies or substantial portions of the 
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY 
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE 
AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 
OR OTHER DEALINGS IN THE SOFTWARE. 
---------------------------------------------------------------


Password Strength Factors and Weightings

password length:
level 0 (3 point): less than 4 characters
level 1 (6 points): between 5 and 7 characters
level 2 (12 points): between 8 and 15 characters
level 3 (18 points): 16 or more characters

letters:
level 0 (0 points): no letters
level 1 (5 points): all letters are lower case
level 2 (7 points): letters are mixed case

numbers:
level 0 (0 points): no numbers exist
level 1 (5 points): one number exists
level 1 (7 points): 3 or more numbers exists

special characters:
level 0 (0 points): no special characters
level 1 (5 points): one special character exists
level 2 (10 points): more than one special character exists

combinatons:
level 0 (1 points): letters and numbers exist
level 1 (1 points): mixed case letters
level 1 (2 points): letters, numbers and special characters 
				exist
level 1 (2 points): mixed case letters, numbers and special 
				characters exist


NOTE: Because I suck at regex the code might need work
  
NOTE: Instead of putting out all the logging information,
  the score, and the verdict it would be nicer to stretch
  a graphic as a method of presenting a visual strength
  guage.

************************************************************ */
function testPassword(passwd, formname)
{
	var intScore   = 0
	var strVerdict = "zwak"
	
	// PASSWORD LENGTH
	if (passwd.length<5)                         // length 4 or less
	{
		intScore = (intScore+3)
	}
	else if (passwd.length>4 && passwd.length<8) // length between 5 and 7
	{
		intScore = (intScore+6)
	}
	else if (passwd.length>7 && passwd.length<16)// length between 8 and 15
	{
		intScore = (intScore+12)
	}
	else if (passwd.length>15)                    // length 16 or more
	{
		intScore = (intScore+18)
	}
	
	
	// LETTERS (Not exactly implemented as dictacted above because of my limited understanding of Regex)
	if (passwd.match(/[a-z]/))                              // [verified] at least one lower case letter
	{
		intScore = (intScore+1)
	}
	
	if (passwd.match(/[A-Z]/))                              // [verified] at least one upper case letter
	{
		intScore = (intScore+5)
	}
	
	// NUMBERS
	if (passwd.match(/\d+/))                                 // [verified] at least one number
	{
		intScore = (intScore+5)
	}
	
	if (passwd.match(/(.*[0-9].*[0-9].*[0-9])/))             // [verified] at least three numbers
	{
		intScore = (intScore+5)
	}
	
	
	// SPECIAL CHAR
	if (passwd.match(/.[!,@,#,$,%,^,&,*,?,_,~]/))            // [verified] at least one special character
	{
		intScore = (intScore+5)
	}
	
								 // [verified] at least two special characters
	if (passwd.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/))
	{
		intScore = (intScore+5)
	}

	
	// COMBOS
	if (passwd.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))        // [verified] both upper and lower case
	{
		intScore = (intScore+2)
	}

	if (passwd.match(/([a-zA-Z])/) && passwd.match(/([0-9])/)) // [verified] both letters and numbers
	{
		intScore = (intScore+2)
	}

								// [verified] letters, numbers, and special characters
	if (passwd.match(/([a-zA-Z0-9].*[!,@,#,$,%,^,&,*,?,_,~])|([!,@,#,$,%,^,&,*,?,_,~].*[a-zA-Z0-9])/))
	{
		intScore = (intScore+2)
	}

	if(intScore < 16)
	{
	   strVerdict = "erg zwak"
	   borderColor = "#E45303"
	}
	else if (intScore > 15 && intScore < 25)
	{
	   strVerdict = "zwak"
	   borderColor = "#F7A80A"
	}
	else if (intScore > 24 && intScore < 35)
	{
	   strVerdict = "matig"
	   borderColor = "#FCE911"
	}
	else if (intScore > 34 && intScore < 45)
	{
	   strVerdict = "sterk"
	   borderColor = "#E1F117"
	}
	else
	{
	   strVerdict = "erg sterk"
	   borderColor = "#BCF11B"
	}
	
	formname.verdict.value = (strVerdict)
	formname.verdict.style.borderBottomWidth='2px';
	formname.verdict.style.borderBottomColor=borderColor;
}

// Copyright (C) krikkit - krikkit@gmx.net
// --> http://www.krikkit.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
function copy_clip(mijntext)
{
 mijntext = document.getElementById(mijntext).value;
 if (window.clipboardData) 
   {
   
   // the IE-manier
   window.clipboardData.setData("Text", mijntext);
   
   // waarschijnlijk niet de beste manier om Moz/NS te detecteren;
   // het is mij echter onbekend vanaf welke versie dit precies werkt:
   }
   else if (window.netscape) 
   { 
   
   // dit is belangrijk maar staat nergens duidelijk vermeld:
   // you have to sign the code to enable this, or see notes below 
   netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
   
   // maak een interface naar het clipboard
   var clip = Components.classes['@mozilla.org/widget/clipboard;1']
                 .createInstance(Components.interfaces.nsIClipboard);
   if (!clip) return;
   
   // maak een transferable
   var trans = Components.classes['@mozilla.org/widget/transferable;1']
                  .createInstance(Components.interfaces.nsITransferable);
   if (!trans) return;
   
   // specificeer wat voor soort data we op willen halen; text in dit geval
   trans.addDataFlavor('text/unicode');
   
   // om de data uit de transferable te halen hebben we 2 nieuwe objecten 
   // nodig om het in op te slaan
   var str = new Object();
   var len = new Object();
   
   var str = Components.classes["@mozilla.org/supports-string;1"]
                .createInstance(Components.interfaces.nsISupportsString);
   
   var copytext=mijntext;
   
   str.data=copytext;
   
   trans.setTransferData("text/unicode",str,copytext.length*2);
   
   var clipid=Components.interfaces.nsIClipboard;
   
   if (!clip) return false;
   
   clip.setData(trans,null,clipid.kGlobalClipboard);
   
   }
   //alert("De code is naar uw klembord gekopieerd en kunt u in uw website plakken, het keurmerk zal hierna direct op uw website verschijnen.");
   return false;
}
