﻿var g_FocusElementStyle = "2px solid #000000";
var g_UnFocusElementStyle = "2px solid #cbcbcb";
var g_FocusBackColor = "#ffc";
var g_reEmail = /^[\w\.=-]+\@[\w\.-]+\.[a-z]{2,4}$/;
var g_invalidFields = 0;

function initFormElements(sValidElems) {
    var inputElems = document.getElementsByTagName('textarea');
    for (var i = 0; i < inputElems.length; i++) {
        com_joemarini.EVENTS.addEventHandler(inputElems[i], 'focus', highlightFormElement, false);
        com_joemarini.EVENTS.addEventHandler(inputElems[i], 'blur', unHighlightFormElement, false);
    }
    /* add the code for the input elements */
    inputElems = document.getElementsByTagName('input');
    for (var i = 0; i < inputElems.length; i++) {
        if (sValidElems.indexOf(inputElems[i].getAttribute('type')) != -1) {
            com_joemarini.EVENTS.addEventHandler(inputElems[i], 'focus', highlightFormElement, false);
            com_joemarini.EVENTS.addEventHandler(inputElems[i], 'blur', unHighlightFormElement, false);
        }
    }
	

    /* add the reset and submit handlers */
    com_joemarini.EVENTS.addEventHandler(document.getElementById('contactAttorney'), 'reset', function() {
        document.getElementsByTagName('input')[0].focus();
        for (var i = 0; i < document.getElementsByTagName('label').length; i++)
            document.getElementsByTagName('label')[i].className = "required";
			
			
		for (var i= 0; i < document.getElementsByTagName('input').length; i++)
			document.getElementsByTagName('input')[i].className = "required";
			
		document.getElementById('subject').className = "required";
			
		for (var i= 0; i < document.getElementsByTagName('textarea').length; i++)
			document.getElementsByTagName('textarea')[i].className = "required";
		document.getElementById('nameError').className = "error";
		document.getElementById('nameError').style.visibility = 'hidden';
		document.getElementById('nameError').innerHTML = "";
		document.getElementById('addrError').style.visibility = 'hidden';
		document.getElementById('addrError').innerHTML = "";
		document.getElementById('addrError').className = "error";
		document.getElementById('subError').style.visibility = 'hidden';
		document.getElementById('subError').innerHTML = "";
		document.getElementById('subError').className = "error";
		document.getElementById('msgError').style.visibility = 'hidden';
		document.getElementById('msgError').innerHTML = "";
		document.getElementById('msgError').className = "error";
		document.forms[0].Submit.disabled = true;
	  }, false);
    com_joemarini.EVENTS.addEventHandler(document.getElementById('contactAttorney'), 'submit', validateAllFields, false);
    
    /* add the default focus handler */
    document.getElementsByTagName('input')[0].focus();

    /* add the event handlers for validation */
    com_joemarini.EVENTS.addEventHandler(document.forms[0].subject,'blur',validateSubject,false);
    com_joemarini.EVENTS.addEventHandler(document.forms[0].address, 'blur', validateAddress, false);
    com_joemarini.EVENTS.addEventHandler(document.forms[0].message, 'blur', validateMsg, false);
	com_joemarini.EVENTS.addEventHandler(document.forms[0].name, 'blur', validateName, false);
}


function getLabelByID(idStr) {
    var formLabels = document.getElementsByTagName('label');
    var attrName = window.event ? "htmlFor" : "for";
    for (var i = 0; i < formLabels.length; i++) {
        if (formLabels[i].getAttribute(attrName) == idStr)
            return formLabels[i];
    }
    return null;
}

function highlightFormElement(evt) {
    var elem = com_joemarini.EVENTS.getEventTarget(evt);
    if (elem != null) {
        elem.style.border = g_FocusElementStyle;
        elem.style.backgroundColor = g_FocusBackColor;
    }
}

function unHighlightFormElement(evt) {
    var elem = com_joemarini.EVENTS.getEventTarget(evt);
    if (elem != null) {
        elem.style.border = g_UnFocusElementStyle;
        elem.style.backgroundColor = "";
    }
}

function validateSubject() {
    var formField = document.getElementById('subject');
	var errorField = document.getElementById('subError');
    var ok = (formField.value != null && formField.value.length != 0);
    var theLabel = getLabelByID('subject');
    if (theLabel != null) {
        if (ok) {
			theLabel.className = "validated";
            formField.className = "validated";
			errorField.style.visibility = "hidden";
			document.getElementById('subError').innerHTML = "";
			checkValues();
        }
        else {
            theLabel.className = "invalid";
			formField.className = "invalid";
			document.forms[0].Submit.disabled = true;
			errorField.style.visibility = "visible";
			document.getElementById('subError').innerHTML = "This field is required, please enter a subject.";
		}
    }
    return ok;
}

function validateName() {
    var formField = document.getElementById('name');
	var errorField = document.getElementById('nameError');
    var ok = (formField.value != null && formField.value.length != 0);
    var theLabel = getLabelByID('name');
    if (theLabel != null) {
        if (ok) {
			theLabel.className = "validated";
            formField.className = "validated";
			errorField.style.visibility = "hidden";
			document.getElementById('nameError').innerHTML = "";
			checkValues();
        }
        else {
            theLabel.className = "invalid";
			formField.className = "invalid";
			document.forms[0].Submit.disabled = true;
			errorField.style.visibility = "visible";
			document.getElementById('nameError').innerHTML = "This field is required, please enter your name.";
		}
    }
    return ok;
}

function validateAddress() {
    var formField = document.getElementById('address');
	var errorField = document.getElementById('addrError');
    var ok = (formField.value.length != 0 && g_reEmail.test(formField.value));
    var theLabel = getLabelByID('address');
    if (theLabel != null) {
        if (ok) {
            theLabel.className = "validated";
			formField.className = "validated";
			errorField.style.visibility = "hidden";
			document.getElementById('addrError').innerHTML = "";
			checkValues();
        }
        else {
            theLabel.className = "invalid";
			formField.className = "invalid";
			document.forms[0].Submit.disabled = true;
			errorField.style.visibility = "visible";
			document.getElementById('addrError').innerHTML = "Please enter a valid email address.";
		}
    }
    return ok;
}

function validateMsg() {
    var formField = document.getElementById('message');
	var errorField = document.getElementById('msgError');
    var ok = (formField.value != null && formField.value.length != 0);
    var theLabel = getLabelByID('message');
    if (theLabel != null) {
        if (ok) {
            theLabel.className = "validated";
			formField.className = "validated";
			errorField.style.visibility = "hidden";
			document.getElementById('msgError').innerHTML = "";
			checkValues();
        }
        else {
            theLabel.className = "invalid";
			formField.className = "invalid";
			document.forms[0].Submit.disabled = true;
			errorField.style.visibility = "visible";
			document.getElementById('msgError').innerHTML = "This field is required, please enter a question or comment.";
		}
    }
    return ok;
}

function checkValues() {
	var messageField = document.getElementById('message');
	var subjectField = document.getElementById('subject');
	var addressField = document.getElementById('address');
	var nameField = document.getElementById('name');
	
	var ok = (messageField.value != null && messageField.value.length != 0 && subjectField != null && subjectField.value.length != 0 && addressField != null && addressField.value.length != 0 && nameField != null && nameField.value.length != 0 && g_reEmail.test(addressField.value))
	
	if (ok) {
		document.forms[0].Submit.disabled = false;
	} else {
		document.forms[0].Submit.disabled = true;
	}
	return ok;
}

function validateAllFields(e) {
    // need to do it this way to make sure all the functions execute
    var bOK = validateSubject();
    bOK &= validateAddress();
    bOK &= validateMsg();

    if (!bOK) {
        alert("The fields that are marked bold and red are required. Please supply valid\nvalues for these fields before sending.");
        com_joemarini.EVENTS.preventDefault(e);
    }
}

com_joemarini.EVENTS.addEventHandler(window, "load", function() { initFormElements('text'); }, false);


