function focusLabels() {
    if (!document.getElementsByTagName) return false;
    var labels = document.getElementsByTagName("label");
    for (var i=0; i<labels.length; i++) {
        if (!labels[i].getAttribute("for")) continue;
        labels[i].onclick = function() {
            var id = this.getAttribute("for");
            if (!document.getElementById(id)) return false;
            var element = document.getElementById(id);
            element.focus();
        }
    }
}

function resetFields(whichform) {
    for (var i=0; i<whichform.elements.length; i++) {
        var element = whichform.elements[i];
        if (element.type == "submit") continue;
        if (!element.defaultValue) continue;
        element.onfocus = function() {
            if (this.value == this.defaultValue) {
                this.value = "";
            }
        }
        element.onblur = function() {
            if (this.value == "") {
                this.value = this.defaultValue;
            }
        }
    }
}

function validateForm(whichform) {
    for (var i=0; i<whichform.elements.length; i++) {
        var element = whichform.elements[i];
        
        if (element.className.indexOf("required") != -1) {
            if (!isFilled(element)) {
                if (element.name == "name1") {
                    alert("Please complete the first name field.");
                } else if (element.name == "addr1") {
                    alert("Please complete the first address line field.");
                } else if (element.name == "addr2") {
                    alert("Please complete the second address line field.");
                } else if (element.name == "numweeks") {
                    alert("Please complete the number of weeks field.");
                } else {
                    alert("Please complete the "+element.name+" field.");
                }
                return false;
            }
        }
        
        if (element.className.indexOf("reqflatno") != -1) {
            if (!isflatno(element)) {
                if (element.name == "flatnum") {
                    alert("Please complete the flat number field between 1 and 12.");
                }
                return false;
            }
        }
        
        if (element.className.indexOf("emailaddr") != -1) {
            if ((element.value != "") && (element.value != element.defaultValue)) {
                if (!isEmail(element)) {
                    alert("The "+element.name+" field must be a valid email address.");
                    return false;
                }
            }
        }
        
    }
    return true;
}

function isflatno(field) {
    if (field.value.length < 1 || field.value < 1 || field.value > 12) {
        return false;
    } else {
        return true;
    }
}

function isFilled(field) {
    if (field.value.length < 1 || field.value == field.defaultValue) {
        return false;
    } else {
        return true;
    }
}

function isEmail(field) {
    if (field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1) {
        return false;
    } else {
        return true;
    }
}

function prepareForms() {
    for (var i=0; i<document.forms.length; i++) {
        var thisform = document.forms[i];
        resetFields(thisform);
        thisform.onsubmit = function() {
            return validateForm(this);
        }
    }
}

addLoadEvent(focusLabels);
addLoadEvent(prepareForms);