 /*
 * 
 * Validation
 * 
 * 
 */


// validate on blur
$(function(){
	$("input, select, textarea").blur(function(){
		validateMe($(this));
		var totalErrors = showErrors();
	});

});

// validate on submit
$(function(){

		$("#mortgageForm").submit(function() {

                $("#validating").dialog({
                      bgiframe: true, autoOpen: false, height: 100, modal: true
	            });
                $('#validating').dialog('open');

                //$("#mortgageFormSubmitButton").hide(100);

				if (!validateForm()) {
			        $("#mortgageFormSubmitButton").show();
					return false;
				}
				else {
					return true;
				}
		
		});
	
        $("#mortgageFormSubmitButton").click(function(){
		
				$('#mortgageForm').submit();				
                return false;

		}); // end submit function

});

function validateForm() {

        // validate the fields
        $("#mortgageForm").find("input, select, textarea").each(function() {

        	validateMe($(this));

        });

        $("#loanTemplate").find(".validationError").remove();

        var totalErrors = showErrors();

		if (totalErrors < 1) {
	        $("#validating").text('Submitting form');
	        // remove the templates before submitting
	        $("#additionalPropertyDiv").remove();
	        $("#investmentTemplate").remove();
	        $("#loanTemplate").remove();
			
			return true;
		}
		else {
	        $("#mortgageFormSubmitButton").show();
	        $('#validating').dialog('close');
	        return false;
		}

}


function validateMe(myInput) {
	
	var myClass=$(myInput).attr("className");

	
	if (myClass.substring(0,8) == "validate") {
		var blank = getBlank(myInput);
		var required = getRequired(myClass);
		var valid = true; // defaults to true then sets it to false if there is a validation error
		var validationType = getValidationType(myClass);
		if (blank && !required) { 
			
			 // do nothing 
			
		}
		else if (blank && required) {
			valid = false;		
			addValidationError(myInput, "This field is required.");
			
	    }
		else if (!blank) {
			var pattern = "";
			var message = "";
			
			switch(validationType){
				case 'onlyNumbers': 
					
					pattern = eval("/^[0-9\]+$/");
					message = "Please only use numbers in this field.";
					
					if (!pattern.test($(myInput).attr('value'))) {
						valid = false;		
						addValidationError(myInput,message);
						
						}

				
				break;
				
				case 'email':
					
					
					pattern = eval("/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/");
					message = "Please use a valid e-mail address";
					
					if (!pattern.test($(myInput).attr('value'))) {
						valid = false;		
						addValidationError(myInput,message);
						
						}
					
					
				break;
				
				case 'phone':
					
					pattern = eval("/^[0-9\-\(\)\ ]+$/");
					message = "Please us a valid Phone number";
					
					if (!pattern.test($(myInput).attr('value'))) {
						valid = false;		
						addValidationError(myInput,message);
						
						}
					
				break;
				
				
				
				default:
					//
				break;
				}
			

			
		}
		
		if(valid) { 
			
			 removeValidationErrors(myInput);
			
		}
		
		
		if (validationType == "phone") {
					handlePhones();
		}

		
	}// end if starts with validate
	
	
	
		
		
}

function getBlank(myInput) {
	var myString = $(myInput).val();
	if (myString.length < 1) return true;
	
	else return false;
}

function getRequired(myClass) {
	
	var myArrayString = myClass.substring(9,myClass.length-1);
	var myArray = new Array();
	myArray = myArrayString.split(",");
	
	if (myArray[0] == "required") return true;
	else return false;
}

function getValidationType(myClass) {
	var myArrayString = myClass.substring(9,myClass.length-1);
	var myArray = new Array();
	myArray = myArrayString.split(",");
	
	
	if (myArray[1] == "custom[onlyNumber]") return "onlyNumbers";
	else if (myArray[1] == "custom[email]") return "email";
	else if (myArray[1] == "custom[telephone]") return "phone";
	else return "none";
}

function removeValidationErrors(myInput) {
	
	
	var thisID = $(myInput).attr("id");
	var errorID = "#" + thisID + "-error";
	$(errorID).remove();
	
	var myParent = $(myInput).parent().parent();
	if ($(myParent).parent().hasClass("loanClone") || $(myParent).parent().hasClass("investmentClone")) {
		
		var myParent = $(myInput).parent();
	}
	
	
	 if ($(myParent).find(".validationError").size() < 1) {
	 
	 	$(myParent).removeClass('hasErrors');
	 }
	
}

function handlePhones() {

		if($("#C_SECOND_TEL_1").val()){
			
			removeValidationErrors("#C_TEL_1");
			
		}

	
		if($("#C_TEL_1").val()){
			
			removeValidationErrors("#C_SECOND_TEL_1");
		}

	
		if($("#C_SECOND_TEL_2").val()){
			
			removeValidationErrors("#C_TEL_2");
		}

	
		
		if($("#C_TEL_2").val()){
	
			removeValidationErrors("#C_SECOND_TEL_2");
		}

	
}

/*
function testLength(myString){
	

			
			var myArray = myString.split(",");
			
			var possibleLength = myArray[1] + "," + myArray[2];
			
			// validate length
			if (possibleLength.substring(0, 7) == "length[" && possibleLength.substring(possibleLength.length - 1, possibleLength.length) == "]") {
				var lengthArray = possibleLength.substring(7, possibleLength.length - 1).split(",");
			}
			else {
				lengthArray = null;
			}
	
	return lengthArray;
			
}
*/

function makePopUp(thisID,message){
	
	
	var popUp = $('<div class="validationError" id="'+ thisID +'-error" style="display: block;">' + message + '</div>');
	
	return popUp;
}

function addValidationError(myInput, popUpMessage) {
	var thisID = $(myInput).attr("id");
	var popUp = makePopUp(thisID,popUpMessage);
	
	var myParent = $(myInput).parent().parent();
	
	if ($(myParent).parent().hasClass("loanClone") || $(myParent).parent().hasClass("investmentClone")) {
		$(myInput).parent().addClass('hasErrors');
		
		// if the error hasn't been added, add it
		if (!$(myInput).parent().hasClass("validationError")) {
			$(myInput).parent().find(".validationError").remove();
			$(myInput).parent().append(popUp);
		}
		
	}
	else {
		$(myParent).find(".validationError").remove();
		$(myInput).parent().append(popUp);
		
		if ($(myParent).hasClass('.formRow')) {
			$(myParent).addClass('hasErrors');
		}
		
	}
}




function showErrors() {
	
	var mysize = $("#mortgageForm").find(".validationError").size();
	$("#validationFeedback").empty();
	
			var plural = "";
			var reverseplural = "s";
			if (mysize > 1) plural ="s";
			if (mysize > 1) reverseplural ="";

		var message = "<h3>Before you submit the form, " + mysize + " field" + plural + " need" + reverseplural + " your attention.  Click each box below to jump to the related tab</h3>";
		
		if (mysize == 0) message = "<h3></h3>";
		
		$("#validationFeedback").append(message);
	
	var totalErrors = mysize;
	
	var mytab = "";
	for (var i=1; i< 9; i++) {
		mytab = "#tab-" + i;
		mysize = $(mytab).find(".validationError").size();
		tabName = $(".ui-tabs-nav li").eq(i-1).text();
		if (mysize > 0) {
			
			
			
			plural = "";
			if (mysize > 1) plural ="s";
			
			
			errorList = "";

			
			//message = '<div class="errorMessage"><strong><a href="' + mytab + '" class="tabLink">' + tabName + '</a></strong>:<p>' + mysize + ' issue' + plural + '</p>' + errorList + '</div>';
			message = '<a href="'+mytab+'" class="tabLink"><div class="errorMessage"><strong>'+ tabName + '</strong>:<p>' + mysize + ' issue' + plural + '</p>' + errorList + '</div></a>';
			$("#validationFeedback").append(message);
			
		}
			
	}
	
	// make the tab links work in the validation feedback boxes above the form:
	$("#validationFeedback .tabLink").click(function(){
								
					var tabID = $(this).attr("href");
					var tabIndex = tabID.substring(tabID.length-1,tabID.length);
					
					$("#mortgageFormTabs").tabs('select', tabIndex);
					
					return false;
			});
	
	return totalErrors;
}




