document.getElementsByClassName = function(cl) {
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
//var s = '';
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		//s += classes + " \n ";
		if (myclass.test(classes)) retnode.push(elem[i]);
	}
	//alert(s);
	return retnode;
};

// Verify the form and it's types
function verify_credits(form) {
	var element = null;
	var pattern = "";
	var element_type = "";
	var element_id = 0;
	var element_required = 0;	
	var tr = "";
	var incorrect_pattern = false;
	var field_error = false;
	var error = false;
	
	// Find the elements of this form	
	for(i = 0; i < form.length; i++) {
		// It should not be hidden, disabled, reset or a submit
		if(form[i].type != "button" && form[i].type != "submit" && form[i].type != "reset" && form[i].disabled != true) {
			field_error = false;
			element = form[i];
		
			if(element.name.search(/^\w+_\d+_\d+$/) > -1){
				var s = element.name.split('_');
				element_type = s[0];
				element_id = s[1];
				element_required = s[2];
			} else {
				continue;
			}

			// What pattern should this element match?
			pattern = new RegExp(getPattern(element_type));
			incorrect_pattern = !pattern.test(element.value);
			
			// Special check for dates
			if(element_type == 'date') {
				if (element.value.substring(0,6) == "DD-MM-") {
					element.value = '';
				}
			}
			/*
			if(element_type == 'date' && element.value == "DD-MM-JJJJ")
				incorrect_pattern = false;
			if(element_type == 'date' && !incorrect_pattern) {
				// If date is required, it should be checked
				if(element_required == '1') 
					incorrect_pattern = !isValidDate(element.value, "DMY");
				// If it is not empty or not "DD-MM-JJJJ", it should be checked
				else if(replaceAll(" ", "", element.value) != "" && element.value != "DD-MM-JJJJ")
					incorrect_pattern = !isValidDate(element.value, "DMY");
				// Otherwise it is allowed to contain "DD-MM-JJJJ"
				else
					incorrect_pattern = false;
			}
			*/
			// Special check for banknumber
			if(element_type == 'banknumber' && element.value.length == 9 && !incorrect_pattern) {
				field_error = !elfProef(element.value);
			}
			
			// If this is a required field, it may not be empty and match the pattern
			if(element_required == '1' && replaceAll(" ", "", element.value) == "") {
				field_error = true;
			}
			// If this field is required, it should match the pattern
			if(element_required == '1' && incorrect_pattern) {
				field_error = true;
			}
			// If a field is not empty, it should match the pattern
			if(replaceAll(" ", "", element.value) != "" && incorrect_pattern) {
				field_error = true;
			}
			if (element.type == "hidden" && element_required != '1') {
				field_error = false;
			}
			
			if (element_type == "check") {
				if (element_required == "1") {
					field_error = !checkCheckBoxes(element_id);
				} else {
					checkCheckBoxes(element_id);
				}
			}
			
			// Error in this field?
			if(field_error) {
				tr = document.getElementById("tr_"+element_id);
				if(tr) tr.className = "inputerror";
				error = true;
			}
			// No error, so reset the previous error fields
			else {
				tr = document.getElementById("tr_"+element_id);
				if(tr) tr.className = "";
				//error = false;
			}
		} 		
	}
	
	if(error) {
		alert('Enkele velden zijn onjuist ingevuld!');
		return false;
	}
	
	// Tell the form it is submitted
	if(form.add) form.add.value = 1;
	if(form.update) form.update.value = 1;
	return true;
}

function checkCheckBoxes(element_id) {
	var elements = document.getElementsByClassName("check_" + element_id);
	for (var i = 0; i < elements.length; i++) {
		var d = document.getElementById(element_id+"input");
		if (d) {
			d.value += elements[i].id + "|";
		} else {
			return false;
		}
	}
	if (elements.length > 0) return true;
	return false;
}

// Verify a mediumtype
function verify(form) {
	var element;
	var pattern;
	var element_type;
	var element_id;
	var element_required;	
	var tr;
	var incorrect_pattern;
	var field_error;
	var error = false;
	var privacyError = false;
	
	// Find the elements of this form	
	for(i = 0; i < form.length; i++) {
		// It should not be hidden, disabled, reset or a submit
		if(form[i].type == "radio") {
			// Check for radio buttons

		}
		else if(form[i].type != "hidden" && form[i].type != "button" && form[i].type != "submit" && form[i].type != "reset" && form[i].disabled != true) {
			element = form[i];
			
			// flash
			if(element.nodeName.toLowerCase() == 'object' || element.nodeName.toLowerCase() == 'embed'){
				continue;
			}

			field_error = false;
			
			element_type = element.id.split('_')[0];
			element_id = element.id.split('_')[1];
			element_required = element.id.split('_')[2];
			
			// What pattern should this element match?
			pattern = new RegExp(getPattern(element_type));
			incorrect_pattern = !pattern.test(element.value);
			
			// Special check for dates
			if(element_type == 'date') {
				if (element.value.substring(0,6) == "DD-MM-") {
					element.value = '';
				}
			}
			/*
			if(element_type == 'date' && element.value == "DD-MM-JJJJ")
				incorrect_pattern = false;
			// Special check for dates
			if(element_type == 'date' && !incorrect_pattern) {
				// If date is required, it should be checked
				if(element_required == '1')
					incorrect_pattern = !isValidDate(element.value, "DMY");
				// If it is not empty or not "DD-MM-JJJJ", it should be checked
				else if(replaceAll(" ", "", element.value) != "" && element.value != "DD-MM-JJJJ")
					incorrect_pattern = !isValidDate(element.value, "DMY");
				// Otherwise it is allowed to contain "DD-MM-JJJJ"
				else
					incorrect_pattern = false;
			}
			*/
			// Special check for banknumber
			if(element_type == 'banknumber' && element.value.length == 9 && !incorrect_pattern) {
				field_error = !elfProef(element.value);
			}
			
			// If this is a required field, it may not be empty and match the pattern
			if(element_required == '1' && element.value.replace(/\s/g, '') == "") {
				field_error = true;
			}
			// If this field is required, it should match the pattern
			if(element_required == '1' && incorrect_pattern) {
				field_error = true;
			}
			// If a field is not empty, it should match the pattern
			if(element.value.replace(/\s/g, '') != "" && incorrect_pattern) {
				field_error = true;
			}
			
			// Error in this field?
			if(field_error) {
				tr = document.getElementById("tr_"+element.name);
				if(tr) tr.className = "inputerror";
				
				row = document.getElementById("row_"+element.name);
				if(row) {
					row.className = "label labelerror";
				}
				
				error = true;
			}
			// No error, so reset the previous error fields
			else {
				tr = document.getElementById("tr_"+element.name);
				if(tr) tr.className = "";
				
				row = document.getElementById("row_"+element.name);
				if(row) {
					row.className = "label";
				}
			}
		}
	}
	
	if(getElement('privacyOk')){
		if(!getElement('privacyOkinput')){
			privacyError = true;
		}
	}
	
	if(error || privacyError) {
		if(privacyError){
			if(error){
				alert('U moet het privacy statement accepteren. Ook zijn er enkele velden onjuist ingevuld!');
			} else {
				alert('U moet het privacy statement accepteren!');
			}
		} else {
			alert('Enkele velden zijn onjuist ingevuld!');
		}
		return false;
	}
	
	// Tell the form it is submitted
	if(form.add) form.add.value = 1;
	if(form.update) form.update.value = 1;
	return true;
}

// Verify a uploadFileType
function verify_minmax(form) {
	var element_min;
	var element_max;
	var error = false;
	
	// Find the elements of this form	
	for(i = 0; i < form.length-1; i++) {
		// It should not be hidden, disabled, reset or a submit
		if(form[i].type != "hidden" && form[i].type != "button" && form[i].type != "submit" && form[i].type != "reset" && form[i].disabled != true) {
			field_error = false;
			element_min = form[i];
			element_max = form[i+1];
			var min_pos = element_min.name.indexOf("minimum");
			var max_pos = element_max.name.indexOf("maximum");
			
			// See if we found a min and max input box
			if(min_pos >= 0 && max_pos >= 0) {
				// If max is 0 or if max is smaller than min: error
				if(element_max.value == 0 || parseInt(element_max.value) < parseInt(element_min.value))
					field_error = true;
				
				// Error in this field?
				if(field_error) {
					tr = document.getElementById("tr_"+replaceAll(" ", "", element_min.name));
					tr.className = "inputerror";
					tr = document.getElementById("tr_"+replaceAll(" ", "", element_max.name));
					tr.className = "inputerror";
					error = true;
				}
				// No error, so reset the previous error fields
				else {
					tr = document.getElementById("tr_"+replaceAll(" ", "", element_min.name));
					tr.className = "";
					tr = document.getElementById("tr_"+replaceAll(" ", "", element_max.name));
					tr.className = "";
				}
			}
		}
	}
	
	if(error) {
		alert('Maximum aantal kan niet kleiner zijn dan minimum aantal!\nMaximum aantal moet groter zijn dan 0!');
		// Tell the form it is not submitted
		if(form.update) form.update.value = 0;
		if(form.add) form.add.value = 0;
		return false;
	}

	return true;
}

function verify_juries(form) {
	var tr = document.getElementById("tr_juries");
	tr.className = "";
	
	var as = document.getElementsByTagName("a");
	for(i = 0; i < as.length; i++)
	{
		if(as[i].className == "checkboxon") {
			return true;
		}
	}
	
	tr = document.getElementById("tr_juries");
	tr.className = "inputerror";
	
	alert('U moet minstens één jury opgeven!');
	
	// Tell the form it is not submitted
	if(form.update) form.update.value = 0;
	if(form.add) form.add.value = 0;
	return false;
}

function verify_algemenevoorwaarden(form) {
	var as = document.getElementsByTagName("a");
	for(i = 0; i < as.length; i++)
	{
		if(as[i].className.indexOf("checkboxon") > -1 )
		{
			return true;
		}
	}
	
	alert('U moet akkoord gaan met de algemene voorwaarden');
	
	// Tell the form it is not submitted
	if(form.update) form.update.value = 0;
	if(form.add) form.add.value = 0;
	return false;
}

function verify_passwords(form) {
	var error = false;
	var message = "";
	
	if(form.password1.value != form.password2.value) {
		error = true;
		message = 'De wachtwoorden die u heeft ingevoerd zijn niet hetzelfde!';
	}
	else if(form.password1.value.length < 8) {
		error = true;
		message = 'Uw wachtwoord moet minstens 8 tegens bevatten!';
	}
	
	if(error) {
		tr = document.getElementById("tr_password1");
		tr.className = "inputerror";
		tr = document.getElementById("tr_password2");
		tr.className = "inputerror";
		
		// Tell the form it is not submitted
		if(form.update) form.update.value = 0;
		if(form.add) form.add.value = 0;
		alert(message);
		return false;
	}
	
	tr = document.getElementById("tr_password1");
	tr.className = "";
	tr = document.getElementById("tr_password2");
	tr.className = "";
				
	return true;
}

function verify_login(form) {
	var error = false;
	var message = "";
	var pattern = new RegExp(getPattern('email'));
			
	if(replaceAll(" ", "", form.email.value) == "") {
		error = true;
		message = 'U moet wel een e-mail adres opgeven!';
	}
	else if(!pattern.test(form.email.value)) {
		error = true;
		message = 'Geef een geldig e-mail adres op!';
	}
	else if(replaceAll(" ", "", form.pass.value) == "") {
		error = true;
		message = 'Voer uw wachtwoord in!';
	}
	
	if(error) {
		alert(message);
		return false;
	}
				
	return true;
}

function verify_new_artwork(form) {
	
	var fl = getFlashMovieObject('flmenu');

	try
	{
		var mediaTypeId = fl.GetVariable('mediaTypeId');
		var categoryId = fl.GetVariable('categoryId');
		var catTypeId = fl.GetVariable('catTypeId');

		form.mediumtype.value = mediaTypeId;
		form.category.value = categoryId;
		form.artworktype.value = catTypeId;

		form.submitted.value = 1;

	}
	catch(e)
	{
		//alert('error');
		return false;	
	}
	
	var mediumtypeId = form.mediumtype.value;
	var catId = form.category.value;
	
	if(mediumtypeId == "" || catId == "") {
		alert('U dient wel een categorie te kiezen!');
		return false;
	}
	
	var as = document.getElementsByTagName("a");
	for(i = 0; i < as.length; i++)
	{
		if(as[i].id.indexOf("checkbox_"+mediumtypeId+"_"+catId+"_") >= 0 && as[i].className == "checkboxon") {
			form.submitted.value = 1;
			return true;
		}
	}

	alert('U moet minstens één jury opgeven!');
	return false;
}

function alert_remove() {
	return confirm("Weet u zeker dat u deze wilt verwijderen?");
}

function getPattern(type) {
	var pattern = "";

	if(type == 'none'){
		pattern = '^.{0}$';
	} else if(type == 'shorttext'){
		pattern = '^.*$';
	} else if(type == 'mediumtext') {
		pattern = '^[\\w\\W]*$';
	} else if(type == 'longtext') {
		pattern = '^[\\w\\W]*$';
	} else if(type == 'integer') {
		pattern = '(^-?[0-9]*$)';
	} else if(type == 'unsignedinteger'){
		pattern = '(^[0-9]*$)';
	} else if(type == 'double') {
		pattern = '(^-?[0-9]*((\.)[0-9]+)?)$';
	} else if(type == 'unsigneddouble'){
		pattern = '(^[0-9]*((\.)[0-9]+)?)$';
	} else if(type == 'price'){
		pattern = '(^-?[0-9]*((\.)[0-9]{1,2})?)$';
	} else if(type == 'unsignedprice'){
		pattern = '(^[0-9]*((\.)[0-9]{1,2})?)$';
	} else if(type == 'email'){
		pattern = '^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$';
	} else if(type == 'zipcode'){
		pattern = '.*';
		//pattern = '(^[0-9]{4} [A-Z]{2}$)';
	} else if(type == 'phone'){
		pattern = '.*';
		//pattern = '(^0[1-9][0-9]{0,2}-?[1-9][0-9]{5,7}$)';
	} else if(type == 'banknumber') {
		// TODO: banknumber pattern check
		pattern = '(^[0-9]{6,10}$)';
	} else if(type == 'date'){
		pattern = '.*';
		//pattern = '^[0-9]{1,2}(\-|\/|\.)[0-9]{1,2}(\-|\/|\.)[0-9]{4}$';
	} else if(type == 'radio') {
		pattern = '^.*$';
	} else if(type == 'checkbox') {
		pattern = '^.*$';
	} else if(type == 'selectcustom') {
		pattern = '^.*$';
	} else if(type == 'selectnumbers') {
		pattern = '^.*$';
	} else {
		pattern = '^.{0}$';
	}
	return pattern;
}

// This is just used to format the fields, NOT to check them
var g_oldDateValues = new Array();
function makeFormat(fieldId, type) {
	var field = document.getElementById(fieldId);
	var value = field.value;

	if(type == 'zipcode') {
		// all checks have been disabled to allow foreign zipcodes
		//value = value.toUpperCase();
		//value = replaceAll(" ", "", value);
		//value = value.substr(0,4)+" "+value.substr(4,6);
	}
	//else if(type == 'phone') {
	//	value = replaceAll(" ", "-", value);
	//}
	else if(type == 'date_focus') {
		if(value.indexOf('D') >= 0 || value.indexOf('M') > 0 || value.indexOf('J') > 0) {
			g_oldDateValues[fieldId] = value;
			value = '';
			field.style.color = '';
		}
	}
	else if(type == 'date_blur') { 
		if(replaceAll(" ", "", value) == '') {
			value = g_oldDateValues[fieldId];
			field.style.color = '#c0c0c0';
		}else{
			/*
			var spl = g_oldDateValues[fieldId].split("-");
			var spl2 = value.split("-");
			if(spl.length == 3 && spl2.length == 3) {
				if(spl[0] != 'DD' && spl[0] != spl2[0]) {
					alert("de dag moet " + spl[0] +" zijn");
					field.focus();
				}
				if(spl[1] != 'MM' && spl[1] != spl2[1]) {
					alert("het maand moet " + spl[1] +" zijn");
					field.focus();
				}
				if(spl[2] != 'JJJJ' && spl[2] != spl2[2]) {
					alert("het jaar moet " + spl[2] +" zijn");
					field.focus();
				}
			}else{
				alert("foutieve datum");
			}
			*/
			
		}
	}
	else
		return;
		
	field.value = value;
}

function isValidDate(dateStr, format) {
	if (format == null) { format = "MDY"; }
	format = format.toUpperCase();
	if (format.length != 3) { format = "MDY"; }
	if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || (format.indexOf("Y") == -1) ) { format = "MDY"; }
	if (format.substring(0, 1) == "Y") { // If the year is first
		var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
		var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
	} else if (format.substring(1, 2) == "Y") { // If the year is second
		var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/
		var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/
	} else { // The year must be third
		var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/
		var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
	}
	// If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
	if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { return false; }
	var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
	// Check to see if the 3 parts end up making a valid date
	if (format.substring(0, 1) == "M") { var mm = parts[0]; } 
	else if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; }
	if (format.substring(0, 1) == "D") { var dd = parts[0]; } 
	else if (format.substring(1, 2) == "D") { var dd = parts[1]; } else { var dd = parts[2]; }
	if (format.substring(0, 1) == "Y") { var yy = parts[0]; } 
	else if (format.substring(1, 2) == "Y") { var yy = parts[1]; } else { var yy = parts[2]; }
	if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }
	if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }
	var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
	if (parseFloat(dd) != dt.getDate()) { return false; }
	if (parseFloat(mm)-1 != dt.getMonth()) { return false; }
	return true;
}

function elfProef(s) {
	var bankrek = s.toString();
	
	bankrek = bankrek.split('.');
	bankrek = bankrek.join('');
	
	var total = 0;

	if(bankrek.length != 9)
		return false;

	for(var i = 0; i < 9; i++)
	{
		total += Number(bankrek.charAt(i))*(9-i);
	}
	
	if(total % 11 != 0)
		return false;
	else
		return true;
}

/**
 * Function to define negative numbers and the amount of decimals
 *
 * Example:
 * onblur="extractNumber(this, 0, false);" onkeyup="extractNumber(this, 0, false);" onkeypress="return blockNonNumbers(this, event, false, false);"
 */
function extractNumber(obj, decimalPlaces, allowNegative) {
        if (typeof obj!='object'){
            obj = document.getElementById(obj);
        }
        var temp = obj.value;

        // avoid changing things if already formatted correctly
        var reg0Str = '[0-9]*';
        if (decimalPlaces > 0) {
                reg0Str += '\\.?[0-9]{0,' + decimalPlaces + '}';
        } else if (decimalPlaces < 0) {
                reg0Str += '\\.?[0-9]*';
        }
        reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
        reg0Str = reg0Str + '$';
        var reg0 = new RegExp(reg0Str);
        if (reg0.test(temp)) return true;

        // first replace all non numbers
        var reg1Str = '[^0-9' + (decimalPlaces != 0 ? '.' : '') + (allowNegative ? '-' : '') + ']';
        var reg1 = new RegExp(reg1Str, 'g');
        temp = temp.replace(reg1, '');

        if (allowNegative) {
                // replace extra negative
                var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
                var reg2 = /-/g;
                temp = temp.replace(reg2, '');
                if (hasNegative) temp = '-' + temp;
        }

        if (decimalPlaces != 0) {
                var reg3 = /\./g;
                var reg3Array = reg3.exec(temp);
                if (reg3Array != null) {
                        // keep only first occurrence of .
                        //  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
                        var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
                        reg3Right = reg3Right.replace(reg3, '');
                        reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
                        temp = temp.substring(0,reg3Array.index) + '.' + reg3Right;
                }
        }

        obj.value = temp;
}
function blockNonNumbers(obj, e, allowDecimal, allowNegative) {
        var key;
        var isCtrl = false;
        var keychar;
        var reg;

        if(window.event) {
                key = e.keyCode;
                isCtrl = window.event.ctrlKey
        }
        else if(e.which) {
                key = e.which;
                isCtrl = e.ctrlKey;
        }

        if (isNaN(key)) return true;

        keychar = String.fromCharCode(key);

        // check for backspace or delete, or if Ctrl or Enter was pressed
        if (key == 8 || isCtrl || key == 13)
        {
                return true;
        }

        reg = /\d/;
        var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
        var isFirstD = allowDecimal ? keychar == '.' && obj.value.indexOf('.') == -1 : false;

        return isFirstN || isFirstD || reg.test(keychar);
}

function replaceAll(findStr,repStr,oldStr) {
	var srchNdx = 0;	// srchNdx will keep track of where in the whole line
						// of oldStr are we searching.
	var newStr = "";	// newStr will hold the altered version of oldStr.
	while (oldStr.indexOf(findStr,srchNdx) != -1) {
		// As long as there are strings to replace, this loop
		// will run. 
		newStr += oldStr.substring(srchNdx,oldStr.indexOf(findStr,srchNdx));
		// Put it all the unaltered text from one findStr to
		// the next findStr into newStr.
		newStr += repStr;
		// Instead of putting the old string, put in the
		// new string instead. 
		srchNdx = (oldStr.indexOf(findStr,srchNdx) + findStr.length);
		// Now jump to the next chunk of text till the next findStr.           
	}
	newStr += oldStr.substring(srchNdx,oldStr.length);
	// Put whatever's left into newStr.             
	return newStr;
}
