/*
-----------------------------------------------------------------------------------------
jquery.validation.js
-----------------------------------------------------------------------------------------

*/
if(typeof ($.JWT) == "undefined") {
	$.JWT = Object;
}

$.JWT.validateForm = {
	
	fieldsArray: null,
	messageFadeIn: true,
	messageFadeOut: false,
	
	validate: function() {
		var validated = true;
		for(field in $.JWT.validateForm.fieldsArray) {	
			var passed = $.JWT.validateForm.checkField(field);
			if (!passed) validated = false;
		}
		return validated;
	},
	
	checkField: function(field) {
		var feedback = $.JWT.validateForm.fieldsArray[field][0];
		var invalid = $.JWT.validateForm.fieldsArray[field][1];
		var proxy =   $.JWT.validateForm.fieldsArray[field][2];
		var proxy_message = $.JWT.validateForm.fieldsArray[field][3];
	
		var error = 0;
		var email = (typeof(invalid) != 'undefined');
		var field_obj = document.getElementById('id_' + field);

		if(!$.JWT.validateForm.isFilled(field_obj)) {
		    if (typeof(proxy_message) == 'undefined')			
		    {		        
    			error = feedback;
		    }
		    else
		    {
		        error = proxy_message;
		    }
		} else {
			if(email) {
				if (!$.JWT.validateForm.isEmail(field_obj)) {
					error = invalid;
				}
			}
		}
		
		if (typeof(proxy) == 'undefined'){
		    target = field_obj;
		} else {
		    target = document.getElementById('id_' + proxy);
		}
		if (error != 0) {
			$.JWT.validateForm.clearfeedback(target);
			$.JWT.validateForm.addfeedback(error,target);
			return false;
		} else {
			$.JWT.validateForm.clearfeedback(target);
			return true;	
		}

		return false;
	},
	
	isFilled: function(x,i) {
		if(x.nodeName == "SELECT" ) {
			return (x.options[x.selectedIndex].value == 0 ? false : true) 
		} else {
			return (x.value.length < 1 ? false : true);
		}		
	},
	
	isEmail: function(field) {
		var regEx = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
		return (field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1 || !field.value.match(regEx) ? false : true);
	},
	
	addfeedback: function(feedback,field) {
		$(field).addClass('error').parent().addClass('error');
		if($.JWT.validateForm.messageFadeIn) {
			$($(field)).parent().prepend('<div class="message">' + feedback + '</div>').find('.message').hide().fadeIn('slow');	
		} else {
			$($(field)).parent().prepend('<div class="message">' + feedback + '</div>');	
		}
			
	},
	
	clearfeedback: function(field) {
		$(field).removeClass('error');
		$(field).parent().removeClass('error');
		if($.JWT.validateForm.messageFadeOut) {
			$($(field)).parent().find('.message').fadeTo('slow',0.01, function() {
				$(this).remove();																	   
			});
		} else {
			$($(field)).parent().find('.message').remove();	
		}
	}
	
}



