var form = document.getElementById('contact_form');
var postURL = "validation.php";
var requiredMsgsInline = false;
//var validMsgsInline = true;                   // maybe for future...

var validResponse = "&nbsp;";                    		// Leave empty if no "OK" feedback is desired
var separateValidMsgLoc = false;                // If "OK" feedback should appear in a different location than errorMsg, set to "true"

var getVar = "";                                // (*Do not change*) Sets a PHP-readable GET var only when entire form is submitted via JS
//var ajax = getHTTPObject();                   // Using jQuery $.ajax() instead

window.onload = attachFormHandlers;


function attachFormHandlers() {
	
    var allTextInputs = document.getElementsByTagName('input');
    var allTextAreas =  document.getElementsByTagName('textarea');
    
    //var allFields = allTextInputs.concat(allTextAreas);

    for (var i=0; i<allTextInputs.length; i++) {
        if (allTextInputs[i].getAttribute('type') == 'text') {
            allTextInputs[i].onblur = function(){return validate(this);} //attach onBlur="validate(this)" to each TEXT input field
        }
    }
    for (var i=0; i<allTextAreas.length; i++) {
        allTextAreas[i].onblur = function(){return validate(this);} //attach onBlur="validate(this)" to each TEXT AREA field
    }
    
    /*
    $(form).submit(function() {
        return validateAllFields();
    });
    */
    //form.onsubmit = function(){return validateAllFields();}
}

function validateAllFields() {
    
    var allTextInputs = document.getElementsByTagName('input');
    var allTextAreas  = document.getElementsByTagName('textarea');

    getVar = "?validationMethod=ajax_allFields";
    
    // 1. Disable submit button
    //form.input.submit.disabled = true; -- breaks the JS
    
    // 2. Run validate() on all fields at once
    for (var i=0; i<allTextInputs.length; i++) {
        validate(allTextInputs[i]);
    }
    for (var i=0; i<allTextAreas.length; i++) {
        validate(allTextAreas[i]);
    }

    //getVar = "";    //Unsets getVar to allow inline validation after submitting form
    
    return false;   //Prevents default action (stops form from going to "action" URL (unless JS is disabled)
}

function validate(fieldElement) {

    var fieldRules = fieldElement.name+"="+fieldElement.value;

    $.ajax({
        url: postURL+getVar,
        type: "POST",
        data: fieldRules,
        cache: false,
        
        success: function(fieldsXML) {
            handleAjaxResponse(fieldsXML);
        }
    });
    // POST via AJAX to be validated.
    /*
    ajax.open("POST",postURL,true);
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    ajax.onreadystatechange = handleAjaxResponse;

    ajax.send(fieldRules);
    */
}

function handleAjaxResponse(ajaxResponse) {

//if (ajax.readyState == 4)
//{
    fieldsXML = ajaxResponse.getElementsByTagName('field');

    //Loop through all <field> elements in XML results
    for (var i=0; i<fieldsXML.length; i++)
    {
        var fieldName = fieldsXML[i].getElementsByTagName('name')[0].firstChild.nodeValue;
        var fieldErrorType = fieldsXML[i].getElementsByTagName('errortype')[0].firstChild.nodeValue;
        var fieldErrorMsg = fieldsXML[i].getElementsByTagName('errormsg')[0].firstChild.nodeValue;

        // Using displayResponseMsgs(), insert contents of each <errormsg> field inside the corresponding message tag on the form...
        // ...or, insert "it's valid" feedback in corresponding message tag on the form.
        var checkedField = document.getElementById(fieldName);
        var checkedFieldErrorMsgId = document.getElementById(fieldName+"Msg");
        var checkedFieldValidMsgId = document.getElementById(fieldName+"ValidMsg");
		

        if (fieldErrorType=="required") {
            if (requiredMsgsInline)
            {
                displayResponseMsgs(fieldErrorMsg,checkedField,checkedFieldErrorMsgId,checkedFieldValidMsgId);
            }
            else
            {
                if (getVar) {
                    displayResponseMsgs(fieldErrorMsg,checkedField,checkedFieldErrorMsgId,checkedFieldValidMsgId);
                }
                else
                {   
                    checkedFieldErrorMsgId.innerHTML = "&nbsp;";
                    checkedFieldValidMsgId.innerHTML = "";
                    checkedFieldErrorMsgId.style.visibility = "hidden";
                    checkedField.style.border = "1px solid #706964";
                }
            }
        }
        else
        {
            displayResponseMsgs(fieldErrorMsg,checkedField,checkedFieldErrorMsgId,checkedFieldValidMsgId);
        }
        
    } // end for loop
    
//}
}

function displayResponseMsgs(fieldErrorMsg,checkedField,checkedFieldErrorMsgId,checkedFieldValidMsgId) {

    if (fieldErrorMsg=="null")
    {
        if (separateValidMsgLoc)
        {
            checkedFieldErrorMsgId.innerHTML = "&nbsp;";
            checkedFieldValidMsgId.innerHTML = validResponse;
            checkedFieldErrorMsgId.style.visibility = "hidden";
            checkedField.style.border = "1px solid #706964";
        }
        else
        {
            checkedFieldErrorMsgId.innerHTML = "&nbsp;";
            checkedFieldErrorMsgId.innerHTML = validResponse;
            checkedFieldErrorMsgId.style.visibility = "hidden";
            checkedField.style.border = "1px solid #706964";
        }
    }
    else
    {
        if (separateValidMsgLoc)
        {
            checkedFieldValidMsgId.innerHTML = "";
            checkedFieldErrorMsgId.innerHTML = fieldErrorMsg;
            checkedFieldErrorMsgId.style.visibility = "visible";
            /*
            $(checkedFieldValidMsgId).empty();
            $(checkedFieldErrorMsgId).html(fieldErrorMsg).fadeIn();
            */
            checkedField.style.border = "solid 1px #FF5F7C";
        }
        else
        {
            checkedFieldErrorMsgId.innerHTML = "";
            checkedFieldErrorMsgId.innerHTML = fieldErrorMsg;
            checkedFieldErrorMsgId.style.visibility = "visible";
            /*
            $(checkedFieldErrorMsgId).empty();
            $(checkedFieldErrorMsgId).html(fieldErrorMsg).fadeIn();
            */
            checkedField.style.border = "solid 1px #FF5F7C";
        }
    }

}

/*
function getHTTPObject() {
    var xmlhttp;
    /*@cc_on
    @if (@_jscript_version >= 5)
    try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
  try {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
    xmlhttp = false;
  }
}
@else
xmlhttp = false;
@end @*/
/*
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
        } catch (e) {
            xmlhttp = false;
        }
    }
    return xmlhttp;
}
*/