// Don't use window.onload
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if(oldonload){
				oldonload();
			}
			func();
		}
	}
}

// Find the next element, not just the next sibling
function getNextElement(node) {
	if(node.nodeType == 1) {
		return node;
	}
	if (node.nextSibling) {
		return getNextElement(node.nextSibling);
	}
	return null;
}

// Who needs insertBefore when you can add after?
function insertAfter(newElement, targetElement){
	targetElement = document.getElementById(targetElement);
	var parent = targetElement.parentNode;
	if(parent.lastChild == targetElement){
		parent.appendChild(newElement);
	}else{
		parent.insertBefore(newElement, targetElement.nextSibling);	
	}
}

// Need to add a class instead of replacing one
function addClass(element,value){
	if(!element.className){
		element.className = value;
	}else{
		newClassName = element.className;
		newClassName+= " ";
		newClassName+= value;
		element.className = newClassName;
	}
}

// Check if an e-mail addy is valid
function isEmail(field) {
	var field = document.getElementById(field);
	if (field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1){
		return false;
	} else {
		return true;
	}
}

// Give the login field focus
function setFocus(){
var isfocused = false;
if(!document.getElementById('contactform')) return false;
var elms = ['c-mail', 'tele', 'street', 'subject', 'message'];
	for(var i=0;i<elms.length;i++){
		var elm = document.getElementById(elms[i]);
		if(elm !== undefined){
			if(elm.value != elm.defaultValue){
				isfocused = true;
			}
		}
	}
	if(isfocused != true){
		document.getElementById('c-name').focus();
	}
}

function contactCheck(){
	var goodImg = '/img/form_good.gif';
	var goodInput = 'Correct';
	var badImg = '/img/form_bad.gif';
	var badInput = 'Niet correct';
	var all_require_text = 'Niet alle verplichte velden zijn ingevuld.';
	var bad_mail_feedback = 'Je e-mail adres invullen in de vorm van: jij@jouwdomein.be';
	// BAD! BAD! BAd! var no_input_feedback = 'You need to fill in the ' + error_text + ' field';

	if(!document.getElementById('checkform')) return false;
	if(!document.getElementById('send')) return false;
	var send = document.getElementById('send');
	var form = document.getElementById('checkform');

	function okimg(where){
		// Check if there's an error and remove it
		if(document.getElementById(where +'oops')){
			var oops = document.getElementById(where +'oops');
			oops.parentNode.removeChild(oops);
		}
		// Check if there's an error icon and remove it
		if(document.getElementById(where +'error')){
			var error = document.getElementById(where +'error');
			error.parentNode.removeChild(error);
		}
		// If there's no ok image, create one
		if(!document.getElementById(where + 'ok')){
			var okimg = document.createElement('img');
			okimg.setAttribute('alt', goodInput);
			okimg.setAttribute('title', goodInput);
			okimg.setAttribute('src', goodImg);
			okimg.setAttribute('class', 'ok');
			okimg.setAttribute('id', where + 'ok');
			// Insert it
			insertAfter(okimg, where);
		}
	}

	function oopsy(where, error){
		// If there's a correct sign, remove it
		if(document.getElementById(where + 'ok')){
			var okimg = document.getElementById(where + 'ok');
			okimg.parentNode.removeChild(okimg);
		}
		// If there's no errormessage, create one
		if(!document.getElementById(where + 'oops')){
			var oops = document.createElement('strong');
			var oops_text = document.createTextNode(error);
			addClass(oops, 'oops');
			oops.setAttribute('id', where + 'oops');
			oops.appendChild(oops_text);
			insertAfter(oops, where);
		}
		// If there's no error image, create one
		if(!document.getElementById(where + 'error')){
			var errorimg = document.createElement('img');
			errorimg.setAttribute('alt', badInput);
			errorimg.setAttribute('title', badInput);
			errorimg.setAttribute('src', badImg);
			errorimg.setAttribute('class', 'bad');
			errorimg.setAttribute('id', where + 'error');
			// Insert it
			insertAfter(errorimg, where);
		}
	}

	// Check if the form is good and ready
	function enableDisable(){
		var fieldcount = accept_field.length;
		var acceptcount = 0;
		for (x in accept_field)
		{
			if(accept_field[x] == true){
				acceptcount++;
			}
		}
		if (acceptcount != fieldcount)
		{
			send.disabled = true;
			if(!document.getElementById('warn'))
			{
				var warn = document.createElement('strong');
				warn.setAttribute('id', 'warn');
				addClass(warn, 'oops');
				var warn_text = document.createTextNode(' ' + all_require_text);
				warn.appendChild(warn_text);
				insertAfter(warn, 'send');
			}
		}
		else
		{
			send.disabled = false;
			if(document.getElementById('warn'))
			{
				var warn = document.getElementById('warn');
				warn.parentNode.removeChild(warn);
			}
		}
	}

	// Check the field for valid input
	function checkField(which, error_type, error_text, fieldId){
			if(document.getElementById(which)){
				var elm = document.getElementById(which);
				elm.onblur = function(){
					switch (error_type){
						case 1:
						if(isEmail(which) != false){
							okimg(which);
							accept_field[fieldId] = true;
							enableDisable();
						}else{
							oopsy(which, bad_mail_feedback);
							accept_field[fieldId] = false;
							enableDisable();
						}
						break;
						default:
						if(elm.value.length > 0){
							okimg(which);
							accept_field[fieldId] = true;
							enableDisable();
						}else{
							oopsy(which, 'Je moet het ' + error_text + ' veld invullen');
							accept_field[fieldId] = false;
							enableDisable();
						}
					}
						
			}
		}
	}

	// How is the label called?
	function getLabelName(elementId){
		var labels = document.getElementsByTagName('label');
		for (var j = 0; j<labels.length ; j++)
		{
			var curlabel = labels[j];
			var curName = curlabel.htmlFor;
			if(curName == elementId)
			{
				curName = curlabel.firstChild.nodeValue;
				return curName;
			}
		}
	}
		
	// Finally, go!
	var accept_field = new Array();
	for (var i=0; i<form.elements.length; i++) {
		var element = form.elements[i];
		accept_field[i] = true;
		if (element.className.indexOf("required") != -1) {
			var elementId = element.getAttribute('id');
			var curName = getLabelName(elementId);
			checkField(elementId, 0, curName, i);

			// Check if there's allready input
			var elm = document.getElementById(elementId);
			if(elm.value.length > 0)
			{
				okimg(elementId);
				accept_field[i] = true;
			}else{
				accept_field[i] = false;
			}

		}
		if (element.className.indexOf("email") != -1) {
			checkField(elementId, 1, curName, i);
		}
	}

	// If there's input missing, disable the submit button
	enableDisable();

}

/* Thank you content with style */
function applyPopups()
{
  a = document.getElementsByTagName("a");
  for(i=0; i<a.length; i++)
  {
    if(a[i].className == "popup")
    {
      a[i].onclick = function()
      {
        url = this.getAttribute("href");
        window.open(url,'popup','width=500,height=250,scrollbars=yes');
        return false;
      }
    }
  }
}

addLoadEvent(contactCheck);
addLoadEvent(setFocus);
addLoadEvent(applyPopups);
