// 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(action){
	var hasError = false;
	$("#submit").removeAttr('disabled');
	$("#save_button").removeAttr('disabled');
	$("#errors").empty();
	$(".invalid").removeClass('invalid');

	if ($("#layout_holder_form").length > 0) {
		var $name = $("#name_holder_form");
		var $email = $("#email_holder_form");
		var $phone = $("#phone_holder_form");
		var layoutVal = $("#layout_holder_form").val();
		var bgVal = $("#bg_holder_form").val();
		var priVal = $("#pri_holder_form").val();
		var secVal = $("#sec_holder_form").val();
		var accVal = $("#acc_holder_form").val();
		var txtVal = $("#txt_holder_form").val();
		var palVal = $("#palettes_holder_form").val();
		var $message = '';
	} else {
		var $name = $("#name");
		var $email = $("#email");
		var $phone = $("#phone");
		var $message = $("#message");
	};
	
    if($name.val() == '' && $name.length > 0){
    	$name.addClass("invalid");
    	$("label[for="+$name.attr('name')+"]").addClass("invalid");
        $("#errors").empty().append("<li>Required fields were not populated properly.</li>");
        hasError = true;
    } else {
    	nameVal = $name.val();
    };
    
    if(($email.val() == '') && ($email.length > 0 )){
    	$email.addClass("invalid");
    	$("label[for="+$email.attr('name')+"]").addClass("invalid");
        $("#errors").empty().append("<li>Required fields were not populated properly.</li>");
       	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().append("<li>Required fields were not populated properly.</li>");
            hasError = true;
        } else {
    		emailVal = $email.val();
    	}
    };
    
    if($phone.val() != '' && $phone.length > 0){
        if (checkInternationalPhone($phone.val())==false){
        	$phone.addClass("invalid");
        	$("label[for="+$phone.attr('name')+"]").addClass("invalid");
            $("#errors").empty().append("<li>Required fields were not populated properly.</li>");
            hasError = true;
        } else {
    		phoneVal = $phone.val();
    	}
    } else {
    	phoneVal = '';
    };
    
    if($message.length > 0){
    	if ($message.val() == '') {
    		$message.addClass("invalid");
    		$("label[for="+$message.attr('name')+"]").addClass("invalid");
    		$("#errors").empty().append("<li>Required fields were not populated properly.</li>");
       		hasError = true;
    	} else {
    		messageVal = $message.val();
    	};
    };
    
    if(hasError == false) {	
		$("#submit").attr('disabled','disabled');
		$("#save_button").attr('disabled','disabled');
		
		if (action == 'contact') {
			$.post("sendEmail.php", {name: nameVal, phone: phoneVal, email: emailVal, message: messageVal}, function(data) {
				$("#contactForm").slideUp("normal", function() {				   
					$("#contactForm").before('<h2 style="padding-top:50px">Thanks!</h2><p>Your email has been sent and we will be contacting you shortly.</p>');
				});
			});
			return false;
		};
		
		if (action == 'saveDesign') {
			$.post("addUserRecord.php", {name: nameVal, phone: phoneVal, email: emailVal, layout: layoutVal, color_bg: bgVal, color_pri: priVal, color_sec: secVal, color_acc: accVal, color_txt: txtVal, custom_palettes: palVal}, function(data){
			});
			

			$.post("sendEmail.php", {name: nameVal, phone: phoneVal, email: emailVal, layout: layoutVal, color_bg: bgVal, color_pri: priVal, color_sec: secVal, color_acc: accVal, color_txt: txtVal}, function(data){
			    $("#form-content").slideUp("normal", function() {
			    	$("#saveForm h2").html('Thank you '+nameVal+'!');			   
			    	$("#saveForm").append('<p style="color: #fff; text-align: center;">Your design has been saved and an email has been sent to '+emailVal+'.</p>');
			    });	
			});

			$("#name_holder").attr("value", nameVal);
			$("#email_holder").attr("value", emailVal);
			$("#phone_holder").attr("value", phoneVal);
			$("#button_text_holder").attr("value", "Update");
			$("#submit_design").addClass("Update");
			
			return false;	    
		};
		
		if (action == 'goToBuy') {
			return true;
		};
		
	} else {
		return false;
	};
}