var formErrors = {

    init: function() {

        // check for error list 
        var uls = document.getElementsByTagName('ul');
        if (!uls) { return; }
        var errorLinks;

        for (var i = 0; i < uls.length; i++) {
            if (/^( |)validation-summary( |)$/.test(uls[i].className)) {

                errorLinks = uls[i].getElementsByTagName('a');
            }
        }

        if (!errorLinks) { return; }

        // fix title
        formErrors.fixTitle();

        // fix h2s
        formErrors.fixH2s();

        // adjust labels
        formErrors.fixLabels(errorLinks); // calls fix focus
    },

    fixTitle: function() {

        var mainHeadings = document.getElementsByTagName('h1');
        if (mainHeadings) {

            var h1 = mainHeadings[0].childNodes[0];

            var title = h1.nodeValue.toLowerCase();

            h1.nodeValue = 'Errors in: ' + title;

            document.title = 'Errors in: ' + title;
        }
    },

    fixH2s: function() {

        var h2s;

        h2s = document.getElementsByTagName('h2');

        if (!h2s) { return; }

        for (var i = 0; i < h2s.length; i++) {

            if (/^(| )validation-header( |)$/.test(h2s[i].className)) {

                h2s[i].childNodes[0].nodeValue = "Please correct errors in the list below:";
            }
        }
    },

    fixLabels: function(errorLinks) {

        if (!errorLinks) { return; }

        // labels 
        var labels = document.getElementsByTagName('label');
        var parents = [];
        var newChild = [];
        var existingLabelText = [];
        if (!labels) { return; }

        for (var i = 0; i < labels.length; i++) {

            for (var k = 0; k < errorLinks.length; k++) {

                // call fixFocus() if not IE
                if (typeof window.addEventListener != 'undefined') {

                    formErrors.fixFocus(errorLinks[k]);
                }

                // non-IE
                if (typeof window.addEventListener != 'undefined') {

                    if (labels[i].getAttribute('for') == errorLinks[k].getAttribute('href').replace('#', '')) {

                        // create new String()
                        existingLabelText[i] = labels[i].innerHTML;
                        labels[i].innerHTML = '<span class="hidden">Error. </span>' + existingLabelText[i];

                        labels[i].className = 'red';

                    }

                } else { // IE

                    if (errorLinks[k].getAttribute('href').indexOf('#') != -1) {

                        var linkStart = [];
                        var link = [];

                        linkStart = errorLinks[k].getAttribute('href').indexOf('#') + 1;
                        link = errorLinks[k].getAttribute('href')
		.substring(linkStart, errorLinks[k].getAttribute('href').length);
                        if (labels[i].getAttribute('htmlFor') == link) {

                            existingLabelText[i] = labels[i].innerHTML;
                            labels[i].innerHTML = '<span class="hidden">Error. </span>' + existingLabelText[i];

                            labels[i].className = 'red';
                        }
                    }
                }
            }
        }


    }, // eof fixLabels

    // sets focus in non IE browsers
    fixFocus: function(errorLink) {

        errorLink.onclick = function(e) {

            var theInput = this.getAttribute('href');
            if (!theInput) { return; }

            theInput = theInput.replace('#', '');

            document.getElementById(theInput).focus();

            e.preventDefault(); // for FF

        }
    }
};

attachEventListener(window, "load", formErrors.init, false);