function validate(pairs) {
    var errors = [];
    var errorColour = "rgb(255,200,200)";
    
    for(var id in pairs) {
        var element = document.getElementById(id);
        element.style.backgroundColor = "";
        
        if(element.value == "") {
            errors.push(pairs[id] + " cannot be empty.");
            element.style.backgroundColor = errorColour;
            
            if(element.onblur) element.onblur();
        }
    }
    
    if(errors.length == 0) {
        return true;
    }
    else {
        alert("Please address the following:\n\n- " + errors.join("\n- "));
        return false;
    }
}

function setDefaultText(pairs) {
    for(var id in pairs) {
        var element = document.getElementById(id);
        
        element.value = pairs[id];
        
        element.onfocus = (function() {
            var defaultValue = pairs[id];
            
            return function() {
                if(this.value == defaultValue) {
                    this.value = "";
                }
            }
        })();
        
        element.onblur = (function() {
            var defaultValue = pairs[id];
            
            return function() {
                if(this.value == "") {
                    this.value = defaultValue;
                }
            }
        })();
    }
}

function callFocus(element) {
	var childNodes = element.childNodes;
	
	for(var i in childNodes) {
		if(childNodes[i].onfocus) {
			childNodes[i].onfocus();
		}
		
		callFocus(childNodes[i]);
	}
}
