function setupValidation(inputCheck) {
	var checkThese = null;

	//console.log(inputCheck)
	for (key in inputCheck) {
		if (inputCheck[key][0] == "1") {
			//console.log(inputCheck[key][1]);
			checkThese = inputCheck[key][1] + ', ' + checkThese;
		}
	}
	//console.log(checkThese);
	$(checkThese).addClass('validateThis');
}


function validateName(name){  
    //if it's NOT valid  
    if(name.val().length < 2 || name.val()== name.attr('title')){  
        if (errorMessageLocation == "label") {
            name.parent().children('label').addClass("error").removeClass('success');  
        } else { 
            name.addClass("error").removeClass('success');   
        }
        return false;  
    }  
    //if it's valid  
    else{  
        if (errorMessageLocation == "label") {
            name.parent().children('label').removeClass("error").addClass('success'); 
        } else { 
            name.removeClass("error").addClass('success');    
        }
        return true;  
    }  
}

function validateSelect(select){  
    //if it's NOT valid  
    //console.log(select.children(':selected').val())
    if(select.children(':selected').val() == ""){  
        if (errorMessageLocation == "label") {
            select.parent().children('label').addClass("error").removeClass('success'); 
        } else {
            select.addClass("error").removeClass('success'); 
        }
        return false;  
    }  
    //if it's valid  
    else{    
        if (errorMessageLocation == "label") {
            select.parent().children('label').removeClass("error").addClass('success'); 
        } else {
            select.removeClass("error").addClass('success');  
        }
        return true;  
    }  
}

function validateMessage(message){  
    //it's NOT valid  
    if(message.val().length < 5 || message.val()== message.attr('title')){ 
        if (errorMessageLocation == "label") {
            message.parent().children('label').addClass("error").removeClass('success'); 
        } else { 
            message.addClass("error").removeClass('success');  
        }
        return false;  
    }  
    //it's valid  
    else{  
        if (errorMessageLocation == "label") {
            message.parent().children('label').removeClass("error").addClass('success');  
        } else {
            message.removeClass("error").addClass('success');  
        }
        return true;  
    }  
}  

function validateEmail(email){
    //testing regular expression
    var a = email.val();
    var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]*[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+\.[a-z]{2,4}$/;
    //if it's valid email
    if(filter.test(a)){
        if (errorMessageLocation == "label") {
            email.parent().children('label').removeClass("error").addClass('success');  
        } else {
            email.removeClass("error").addClass('success');  
        }
        return true;
    }
    //if it's NOT valid
    else{
        if (errorMessageLocation == "label") {
            email.parent().children('label').addClass("error").removeClass('success');
        } else {
            email.addClass("error").removeClass('success');
        }
        return false;
    }
}

function newValidateEmail(email) {
	var a = email.val();
	
	var atIndex = a.lastIndexOf("@");
	
	if (atIndex != -1) {
		var domain = a.substring(atIndex + 1, a.length);
		var local = a.substring(0, atIndex);
		var labels = domain.split(".");
		
		if (a.length >=3 && a.length <=254 &&
			local.length >= 1 && local.length <= 64 &&
			domain.length >= 1 && domain.length <= 255 &&
			local.charAt(0) != '.' && local.charAt(local.length - 1) != '.' &&
			local.match(/\.\./) == null &&
			domain.match(/[^a-z0-9\-\.]/i) == null &&
			domain.match(/\.\./) == null &&
			(
				local.match(/^(\\"|[a-z0-9!#%&`_=\/\$'\*\+\?\^\{\}\|~\.\-\\])+$/i) != null ||
				(
					local.match(/^"(\\"|[\u0020-\u0021\u0023-\u007E"])*"$/i) != null && //visable non " chars
					local.match(/([^\\]|[^\\]\\\\)"$/) != null &&
					local.match(/[^\\]"./) == null
				)
			)
		) {
			var successes = 0;
			for (var i = 0; i < labels.length; i++) {
				if (labels[i].length >= 1 && labels[i].length <= 63 &&
					(
						labels[i].match(/^[a-z0-9][a-z0-9-]*[a-z0-9]$/i) != null ||
						labels[i].match(/^[a-z0-9]$/i) != null
					)
				) {
					successes++;
				}
			}
			
			if (successes == labels.length) {
				if (errorMessageLocation == "label") {
					email.parent().children('label').removeClass("error").addClass('success');  
				} else {
					email.removeClass("error").addClass('success');  
				}
				return true;
			}
		}
	}
	
	if (errorMessageLocation == "label") {
		email.parent().children('label').addClass("error").removeClass('success');
	} else {
		email.addClass("error").removeClass('success');
	}
	return false;
}

jQuery(function($){
	$('.validateThis').each(function(){
		//console.log(this.type)
		switch(this.type) {
		    case 'radio':
		    case 'checkbox': 
		    case 'text': 
		    	if ($(this).is('[id$="email"]')) {
		    		$(this).change(function(){ validateEmail($(this)) }); break;
		    	} else {
		    		$(this).change(function(){ validateName($(this)) }); break;
		    	}
		    case 'textarea': $(this).change(function(){ validateMessage($(this)) }); break;
		    case 'select-one': $(this).change(function(){ validateSelect($(this)) }); break;
		    default: alert("unhandled type: "+this.type);
		  }
	});

    var errors=0;
	var loadUrl= window.location.origin;

	$("form").submit(function(event) {  
        event.preventDefault();

        var formHolder = $(this).parent().attr('id');
        //console.log(formHolder)
		checkValidation(formHolder);
        if(errors==0){
            $('.submit',this).attr('disabled','disabled');
            var postData = $(this).serialize();

            postData = postData + '&submitted=Send';

            $('body').append('<div class="formLoading">&nbsp;</div>')
            $.post(window.location.href, postData, function(data) {

                var dataMoth = $(data);
                if(dataMoth.find('.successText').length==1){
                    $('#'+formHolder).fadeOut(function(){
                        $('#'+formHolder).html(dataMoth.find('#'+formHolder).html()).hide().fadeIn();
                    })
                }
                $('.formLoading').fadeOut(function(){
                    $(this).remove();
                })
            });


        }
	});

    function checkValidation(formHolder) {
        $('#'+formHolder+' .validateThis').each(function(){
            //console.log(this.type)
            switch(this.type) {
                case 'radio':
                case 'checkbox': 
                case 'text': 
                    if ($(this).is('[id$="email"]')) {
                       validateEmail($(this)); break;
                    } else {
                        validateName($(this)); break;
                    }
                case 'textarea': validateMessage($(this)); break;
                case 'select-one': validateSelect($(this)); break;
                default: alert("unhandled type: "+this.type);
              }
        });

        if ($('.error').size()>0) {
            if (disableErrorAlert==false) {
                if (changeAlertMessage != "") {
                    alert(changeAlertMessage)
                } else {
                    alert("Easy tiger, you haven't filled in the form correctly. Check all the neccessary fields.");
                };
            };

            errors=1;
        } else {
            errors=0;
        };
    }
})
