var ErrorManager = {errors: new Array()}

ErrorManager.add = function(id, msg)
{
    this.errors.push([id,msg]);
}

ErrorManager.addAll = function(errors)
{
    
    for(i in errors){
        this.add(i, errors[i]);
    }
    
}

ErrorManager.display = function()
{
    if (!this.errors.length){
        return;
    }
    
    for (var i = 0; i < this.errors.length; i++){
      
        var currentError = this.errors[i];
        var errorInput = document.getElementById(currentError[0]);
        var errorMessage = currentError[1];
        
        if (errorInput) {
            errorInput.classname = "error";
            
            var errorMsg = ErrorManager.createMessage(errorMessage);
            
            errorInput.parentNode.removeChild( errorInput.parentNode.getElementsByTagName('BR')[0] );
            
            errorInput.parentNode.appendChild( errorMsg );
            
            errorInput.parentNode.appendChild( document.createElement("BR") );

/*			            
			The problem was that, for some reason, Internet Explorer wasn't picking up the last (fourth) child element, so 
			 trying to get childNode 4 would yield an undefined, and then that was screwing things up..
			 
			 So, instead of doing a browser detect, it's just removing the BR, appending the new element to the end, 
			 and then adding another BR on after. 
*/
/*			
            var currentP = errorInput.parentNode.childNodes[4];
           
            currentP.parentNode.insertBefore(errorMsg, currentP);
*/
        }
        
    }
}


ErrorManager.createMessage = function(msg)
{
    
    var errorMsg = document.createElement("span");
    errorMsg.className = "errorMsg";
    errorMsg.appendChild(document.createTextNode(msg));
    return errorMsg;
    
}

ErrorManager.validate = function()
{
    
    var inputs = document.getElementsByTagName("input");
    var hasError = false;
    
    for (var i=0; i < (inputs.length - 3); i++) {
    
        if ( inputs[i].name!='address' && inputs[i].value == "" ) {
            this.add(inputs[i].getAttribute("id"), this.emptyMessages[inputs[i].name.toUpperCase()]);
            hasError = true;
        }
    
    }
    
    var email = document.getElementById("email");
    
    if (email.value != "" && email.value.search(/^\s*[0-9a-zA-Z\.]+@\w+\.\w+\s*$/) == -1) {
        this.add(email.getAttribute("id"), this.invalidMessages[email.name.toUpperCase()]);
        hasError = true;
    }

    var isResident = document.getElementById("is_resident");
    
    if (!isResident.checked) {
        this.add(isResident.getAttribute("id"), this.emptyMessages[isResident.name.toUpperCase()]);
        hasError = true;
    }
        
    var rules = document.getElementById("agree_to_terms");
    
    if (!rules.checked) {
        this.add(rules.getAttribute("id"), this.emptyMessages[rules.name.toUpperCase()]);
        hasError = true;
    }
    
    if (hasError){
        return false;
    }
  
    return true;
   
}

ErrorManager.process = function()
{
    ErrorManager.clear();
    
    var retVal = ErrorManager.validate();

    if (!retVal){
        ErrorManager.display();
    }
    
    return retVal;
    
}

ErrorManager.clear = function()
{
    
    this.errors = new Array();
 
    messages = getElementsByClassName("errorMsg");
    
    for (var i = 0; i < messages.length; i++){
        var message = messages[i];
        var messageParent = message.parentNode;
        messageParent.removeChild(message);
    }
    
}

ErrorManager.emptyMessages = {
    FIRST_NAME: 'Please enter your first name',
    LAST_NAME: 'Please enter your last name',
    AGE: 'Please enter your birth date',
    EMAIL: 'Please enter your email address',
    IS_RESIDENT: 'You must be a resident of Ontario in order to enter',
    AGREE_TO_TERMS: 'Please agree to the terms and conditions'
}

ErrorManager.invalidMessages = {
    EMAIL: 'You have entered an invalid email address'
}
