var mxvalid = false;

// Removes leading whitespaces
String.prototype.ltrim = function () {
    var re = /\s*((\S+\s*)*)/;
    return this.replace(re, "$1");
}

// Removes ending whitespaces
String.prototype.rtrim = function () {
    var re = /((\s*\S+)*)\s*/;
    return this.replace(re, "$1");
}

// Removes leading and ending whitespaces
String.prototype.trim = function () {
    return this.ltrim().rtrim();
}

// requires jquery 1.3.2 and jquery-ui 1.7.2
function validate_form(frm) {

	var email_regex = /[a-z0-9!#$%&\'*+\/\=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
	var naphone_regex = /^1?([2-9][0-8][0-9])(?!55501)(?!\d11)([2-9][0-9]{6})\d*$/;

    var invalid = Array();
	var errors = Array();
    var elements = Array();

    elements[elements.length] = frm.getElementsByTagName('input');
    elements[elements.length] = frm.getElementsByTagName('textarea');
    elements[elements.length] = frm.getElementsByTagName('select');

    for(var x = 0; x < elements.length; x++) {
        for(var y = 0; y < elements[x].length; y++) {
            var classes = elements[x][y].className.split(' ');
            for(var z = 0; z < classes.length; z++) {
                if (elements[x][y].value.trim().length == 0 && classes[z] == 'vfreq') // empty string and required
                    invalid[invalid.length] = '&nbsp;&nbsp;&nbsp;&nbsp;&bull; ' + (elements[x][y].title.length > 0 ? elements[x][y].title : elements[x][y].name);
				if (classes[z] == 'vfemail' && elements[x][y].value.trim().length > 0 && elements[x][y].value.trim().match(email_regex) == null)
					errors[errors.length] = (elements[x][y].title.length > 0 ? elements[x][y].title : elements[x][y].name) + ' must be a valid email address.';
				if (classes[z] == 'vfemailmx' && elements[x][y].value.trim().length > 0 && elements[x][y].value.trim().match(email_regex) != null && !this.mxvalid)
					errors[errors.length] = (elements[x][y].title.length > 0 ? elements[x][y].title : elements[x][y].name) + ' cannot be verified please try again. -MX';
				if (classes[z] == 'vfnaphonenum' && elements[x][y].value.trim().length > 0 && elements[x][y].value.replace(/[^0-9]/g, '').match(naphone_regex) == null)
					errors[errors.length] = (elements[x][y].title.length > 0 ? elements[x][y].title : elements[x][y].name) + ' must be a valid north american phone number.';
            }
        }
    }

    if (invalid.length > 0 || errors.length > 0) {
		if (document.getElementById('vfdialog') == null) {
			var dialog = document.createElement('div');
			dialog.title = 'Form Submission';
			dialog.id = 'vfdialog';
			dialog.style.display = 'none';

			var body = document.getElementsByTagName('body');
			body[0].appendChild(dialog);
			jQuery("#vfdialog").dialog({
				bgiframe: true,
				modal: true,
				buttons: {
					Ok: function() {
						jQuery(this).dialog('close');
					}
				},
				resizable: false
			});

		}

		var dialog = document.getElementById('vfdialog');

        dialog.innerHTML = ((invalid.length > 0 ? '<p>The following fields must be filled in:<br />' + invalid.join('<br />') + '</p>' : '') + (errors.length > 0 ? '<p>' + errors.join('<br />') + '</p>' : ''));
		jQuery("#vfdialog").dialog('open');
        return false;
    }
    return true;
}

function check_mxrecord(email) {
	if (window.XMLHttpRequest) {
		xhttp=new XMLHttpRequest();
	}
	else { // Internet Explorer 5/6
	  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}

	xhttp.open("GET","/_includes/mxcheck.php?e=" + email,false);
	xhttp.send(null);

	this.mxvalid = (xhttp.responseText == 1);
	return this.mxvalid;
}