
console.log('Validation class loaded');

var bRequiredError 		= false;
var bValidationError 	= false;
var fSuccess;
var fFailure;

dojo.declare( "Validator", null, {

	constructor: function( sFormName ) {

		this.sFormName = sFormName;
	},

    validate: function(fLoad, fError) {

		bRequiredError 		= false;
		bValidationError 	= false;
		fSuccess = fLoad;
		fFailure = fError;
		console.log( "validation logic..." );
		console.log( this.sFormName );

		this.getFormData();
	},

	elementCheck: function( oFormElement ) {

		var validationType 		= oFormElement.className;
		var name 				= oFormElement.name;
		var value 				= oFormElement.value;

		// Validation helpers
		var regEmail = /^.+\@.+\..+$/;
		var regIllegalChars = /[^a-zA-Z0-9_\- ]/;

		var isEmail = function( fieldValue ) {
			if ( regEmail.test( fieldValue ) ) {
				return true;
			}
			return false;
		};

		var isIllegal = function( fieldValue ) {
			if ( regIllegalChars.test( fieldValue ) ) {
				return true;
			}
			return false;
		};

		// If the field is required but empty we show the required message
		if ( validationType.indexOf( "required" ) != -1 ) {
			if ( value == "" ) {
				dojo.byId(name + "Required").style.display = "inline";
				bRequiredError = true;
			}
			else {
				dojo.byId( name + "Required" ).style.display = "none";
			}
		}

		// If there are no required field errors, we validate the fields
		console.log('Going to validate: ' + name);
		if ( !bRequiredError ) {
			if ( validationType.indexOf( "validate" ) != -1 ) {
				if ( isIllegal( value ) ) {
					dojo.byId( name + "Feedback" ).innerHTML = "Dit veld bevat illegale karakters.";
					dojo.byId( name + "Feedback" ).style.display = "inline";
					bValidationError = true;
				}
				else {
//					if (dojo.byId( name + "Feedback" )) {
					    dojo.byId( name + "Feedback" ).style.display = "none";
//					}
				}
			} else {
                if (dojo.byId( name + "Feedback" )) {
                    dojo.byId( name + "Feedback" ).style.display = "none";
                }
			}
		}
	},

	getFormData: function() {

		var oFormObject = dojo.byId( this.sFormName );
		console.log(oFormObject.elements);

		dojo.forEach (
			oFormObject.elements,
			this.elementCheck
		);

		if ( !bRequiredError && !bValidationError ) {

		    // The function that handles response to the AJAX post
		    var load = function( data,ioargs ) {
                console.log('response');
                console.log(data);
                var errors = false;
                if (data) {
                    data = dojo.fromJson(data);
                    console.log(data);
                    for (var element in data) {
                        console.log(element);
                        console.log(data[element]);
                        var messages = new String();
                        for (var message in data[element]) {
                            console.log('weve got errors');
                            errors = true;
                            if (messages.length) {
                                messages += '<br />\n';
                            }
                            messages += data[element][message];
                        }
                        console.log(element);
                        console.log(messages);
                        dojo.byId( element + "Feedback" ).innerHTML = messages;
                        dojo.byId( element + "Feedback" ).style.display = "inline";
                        bValidationError = true;
                    }
                }
                console.log('Do we have errors? ' + errors);
                if (!errors && fSuccess) {
                    fSuccess();
                } else if (fFailure) {
                    fFailure();
                }
            };

			// Ajax submit
		    if (oFormObject.enctype == 'multipart/form-data') {
		        // Uploading of files
	            dojo.io.iframe.send({
	                form: this.sFormName,
	                contentType: "multipart/form-data",
	                load: function (data, args) {console.log('upload successful');}
	            });
		    } else {
		        // Normal form post
	            dojo.xhrPost({
	                form: this.sFormName,
	                load: load
	            });
		    }
		} else if (fFailure) {
            fFailure();
		}
	},

	checkBackendValidation: function(data) {
	}

});


// Global static validation functions

var letters = "ABC�DEFGHIJKLMN�OPQRSTUVWXYZabc�defghijklmn�opqrstuvwxyz������������������������";
var numbers='1234567890';
var signs=',.:;@-\'';
var mathsigns='+-=()*/';
var custom='<>#$%&?�';

function check( e, allow ) {
	var k = document.all ? parseInt( e.keyCode ): parseInt( e.which );
	if ( k == 8 || k == 46 || k == 37 || k == 39 || k == 32 || k == 46 || k == 0 ) {
		return true;
	}
	else {
		return ( allow.indexOf(String.fromCharCode( k ) )!= -1 );
	}
}
