// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
function trim(s)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not a whitespace, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (c != " ") returnString += c;
    }
    return returnString;
}
function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
    var bracket=3
    strPhone=trim(strPhone)
    if(strPhone.indexOf("+")>1) return false
        if(strPhone.indexOf("-")!=-1)bracket=bracket+1
        if(strPhone.indexOf("(")!=-1 && strPhone.indexOf("(")>bracket)return false
        var brchr=strPhone.indexOf("(")
    if(strPhone.indexOf("(")!=-1 && strPhone.charAt(brchr+2)!=")")return false
        if(strPhone.indexOf("(")==-1 && strPhone.indexOf(")")!=-1)return false
        s=stripCharsInBag(strPhone,validWorldPhoneChars);
    return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}



function validate(){
	var hasError = false;
	$("#submit").removeAttr('disabled');
	$("#errors").empty();
	$(".invalid").removeClass('invalid');
	
	var $form = $("#contactEmail");
	var $name = $("#name");
	var $company = $("#company");
	var $email = $("#email");
	var $phone = $("#phone");
	var $message = $("#message");
	var $errors = $("#errors");
	
	var errorStart = "* Required field";
	var errorMsg = "* Required fields were not populated properly.";
	var successMsg = "Thank you for your message. We will be contacting you shortly with a response."
	
	var nameVal = '';
	var companyVal = '';
	var emailVal = '';
	var phoneVal = '';
	var messageVal = '';
	
	$errors.html(errorStart);
		
    if($name.val() == '' && $name.length > 0){
    	$name.addClass("invalid");
    	$("label[for="+$name.attr('name')+"]").addClass("invalid");
        $errors.empty().html(errorMsg);
        $errors.addClass('invalid');
        hasError = true;
    };
    
    if((($email.val() == '') && ($email.length > 0 )) && (($phone.val() == '') && ($phone.length > 0 ))) {
    	if ($email.val() == '') {
    		$email.addClass("invalid");
    		$("label[for="+$email.attr('name')+"]").addClass("invalid");
        	$errors.empty().append(errorMsg);
        	$errors.addClass('invalid');
       		hasError = true;
    	}
    	if ($phone.val() == '') {
    		$phone.addClass("invalid");
    		$("label[for="+$phone.attr('name')+"]").addClass("invalid");
        	$errors.empty().append(errorMsg);
       	 	$errors.addClass('invalid');
       		hasError = true;
    	}
    };
    
    if($email.val() != '' && $email.length > 0){
        var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
        if(reg.test($email.val()) == false) {
        	$email.addClass("invalid");
        	$("label[for="+$email.attr('name')+"]").addClass("invalid");
            $errors.empty().html(errorMsg);
            $errors.addClass('invalid');
            hasError = true;
        }
    };
    
    if($phone.val() != '' && $phone.length > 0){
        if (checkInternationalPhone($phone.val())==false){
        	$phone.addClass("invalid");
        	$("label[for="+$phone.attr('name')+"]").addClass("invalid");
            $errors.empty().html(errorMsg).addClass('invalid');
            hasError = true;
        };
    };
    
    if($message.length > 0){
    	if ($message.val() == '') {
    		$message.addClass("invalid");
    		$("label[for="+$message.attr('name')+"]").addClass("invalid");
    		$errors.empty().html(errorMsg);
    		$errors.addClass('invalid');
       		hasError = true;
    	}
    };
    
    if(hasError == false) {	
		$("#submit").attr('disabled','disabled');
		
		nameVal = $name.val();
		companyVal = $company.val();
		emailVal = $email.val();
		phoneVal = $phone.val();
		messageVal = $message.val();

		$.post("contact.php", {name: nameVal,company: companyVal,email: emailVal,phone: phoneVal,message: messageVal}, function(data) {
		    $form.fadeOut("normal", function() {				   
		    	$form.before('<h4>Thank You!</h4><p>'+successMsg+'</p>');
		    });
		});
		return false;
	} else {
		return false;
	}
}
