﻿/*	 *	jQuery validVal version 1.2.0 *	demo's and documentation: *	validval.frebsite.nl * *	Copyright (c) 2010 Fred Heusschen *	www.frebsite.nl * *	Dual licensed under the MIT and GPL licenses. *	http://en.wikipedia.org/wiki/MIT_License *	http://en.wikipedia.org/wiki/GNU_General_Public_License */(function($) {	$.fn.validVal = function( o ) {		if (this.length > 1) {			return this.each(function() {				$(this).validVal( o );			});		}		var form = this,			opts = $.extend({}, $.fn.validVal.defaults, o),			inputSelector = 'input:not(:button|:submit|:reset|:hidden), textarea, select',			clss = {				//	key			:  class				'default'		: 'default',				'formatted'		: 'formatted',				'autotab'		: 'autotab',				'focus'			: 'focus',				'invalid'		: 'invalid',				'inactive'		: 'inactive'			},			vlds = {				//	function	:  class				'corresponding'	: 'corresponding',				'numeric'		: 'numeric',				'email'			: 'email',				'required'		: 'required'			};		if ( $.fn.validVal.customValidations ) {			opts.customValidations = $.extend({}, $.fn.validVal.customValidations, opts.customValidations);		}		$(inputSelector, form).each(function() {			var $ff = $(this);			$ff.data( 'vv_defaultvalue', $ff.val() )				.data( 'vv_format', $ff.val() )				.data( 'vv_format_text', '' )				.data( 'vv_type', $ff.attr( 'type' ) );			$ff.focus(function() {				vv_clear_defaultvalue( $ff );				vv_clear_formatvalue( $ff );				$ff.addClass( vv_get_class( 'focus' ) );			}).blur(function() {				$ff.removeClass( vv_get_class( 'focus' ) );				$ff.trigger( 'test', opts.validateOnBlur );				vv_restore_formatvalue( $ff );				vv_restore_defaultvalue( $ff );			}).bind('test', function( event, onEvent ) {				if ( onEvent === false ) return;				$ff.data( 'vv_isValid', 'valid' );				for ( var k in vlds ) {					var v = vlds[ k ];					if ( $ff.hasClass( v ) ) {						if ( !eval( 'vv_is_' + k + '( $ff )' ) ) {							$ff.data( 'vv_isValid', 'NOT' );							break;						}					}				}				for ( var v in opts.customValidations ) {					if ( $ff.hasClass( v ) ) {						var f = opts.customValidations[ v ];						if ( typeof f == 'function' ) {							if ( !f( $ff ) ) {								$ff.data( 'vv_isValid', 'NOT' );								break;							}						}					}				}				if ( $ff.data( 'vv_isValid' ) == 'valid' ) {					if ( onEvent !== 'invalid' ) {						vv_set_valid( $ff, form, opts );					}				} else {					if ( onEvent !== 'valid' ) {						vv_set_invalid( $ff, form, opts );					}				}			});			if ( $ff.hasClass( vv_get_class( 'default' ) ) ) {				$ff.addClass( vv_get_class( 'inactive' ) );				if ( $ff.is( 'select' ) ) {					$ff.find( 'option:selected' ).addClass( vv_get_class( 'inactive' ) );					$ff.change(function() {						if ( vv_trim( $ff.val() ) == $ff.data( 'vv_defaultvalue' ) ) {							$ff.addClass( vv_get_class( 'inactive' ) );						} else {							$ff.removeClass( vv_get_class( 'inactive' ) );						}					});				} else if ( $ff.data( 'vv_type' ) == 'password' ) {//					$ff[0].attr( 'type', 'text' );				}			}			if ( $ff.hasClass( vv_get_class( 'corresponding' ) ) ) {				$('[name=' + $ff.attr( 'alt' ) + ']').blur(function() {					if ( vv_trim( $ff.val() ).length > 0 ) {						vv_clear_formatvalue( $ff );						vv_clear_defaultvalue( $ff );						$ff.trigger( 'test', opts.validateOnBlur );						vv_restore_formatvalue( $ff );						vv_restore_defaultvalue( $ff );					}				});			}			if ( $ff.hasClass( vv_get_class( 'autotab' ) ) ) {				var max = $ff.attr( 'maxlength' ),					tab = $ff.attr( 'tabindex' ),					$next = $('[tabindex=' + ( parseInt( tab ) + 1 ) + ']');				if ( $ff.is( 'select' ) ) {					if ( tab ) {						$ff.change(function() {							if ( $next.length ) $next.focus();						});					}				} else {					if ( max && tab ) {						$ff.keyup(function() {							if ( $ff.val().length == max ) {								if ( $next.length ) $next.focus();								$ff.trigger( 'blur' );							}						});					}				}			}		}).filter( 'select, :checkbox, :radio' ).change(function() {			$(this).trigger( 'blur' );		});		form.submitform = function() {			var miss_arr = [];			var data_obj = {};			$(inputSelector, form).each(function() {				var $ff = $(this);				vv_clear_defaultvalue( $ff );				vv_clear_formatvalue( $ff );				$ff.trigger( 'test', opts.validateOnSubmit );								var n = $ff.attr( 'name' ),					v = $ff.val();								vv_restore_defaultvalue( $ff );				vv_restore_formatvalue( $ff );				if ( $ff.data( 'vv_isValid' ) == 'valid' ) {					if ( $ff.is( ':radio' ) || $ff.is( ':checkbox' ) ) {						if ( !$ff.is( ':checked' ) ) v = '';					}					if ( v.length > 0 ) {						data_obj[ n ] = v;					}				} else if ( opts.validateOnSubmit !== false ) {												miss_arr.push( $ff );				}			});			if ( miss_arr.length > 0 ) {				if ( opts.invalidFormFunc ) {					opts.invalidFormFunc( miss_arr, form, opts.language );				}				miss_arr[0].focus();				return false;			} else {				$('input:text', form ).each(function() {					var $ff = $(this);					vv_clear_defaultvalue( $ff );					vv_clear_formatvalue( $ff );				});				return data_obj;			}		};		form.resetform = function() {			$(inputSelector, form).each(function() {				var $ff = $(this);				if ( $ff.hasClass( vv_get_class( 'default' ) ) ) {					$ff.addClass( vv_get_class( 'inactive' ) );				}				vv_set_valid( $ff, form, opts );			});			return true;		};		if ( form.is( 'form' ) ) {			form[0].onsubmit = function() {				return form.submitform();			}			form[0].onreset = function() {				return form.resetform();			}		}		return this;	};	$.fn.validVal.defaults = {		language : 'en',		customValidations : {},		validateOnBlur: true,		validateOnSubmit: true,		invalidFieldFunc : function( $field, $form, language ) {			if ( $field.is( ':radio' ) || $field.is( ':checkbox' ) ) {				$field.parent().addClass( vv_get_class( 'invalid' ) );			}			$field.addClass( vv_get_class( 'invalid' ) );		},		validFieldFunc : function( $field, $form, language ) {			if ( $field.is( ':radio' ) || $field.is( ':checkbox' ) ) {				$field.parent().removeClass( vv_get_class( 'invalid' ) );			}			$field.removeClass( vv_get_class( 'invalid' ) );		},		invalidFormFunc : function( field_arr, $form, language ) { 			switch (language) {				case 'nl':					msg = 'Let op, niet alle velden zijn correct ingevuld.';					break;								case 'de':					msg = 'Achtung, nicht alle Felder sind korrekt ausgefuellt.';					break;					default:					msg = 'Attention, not all the fields have been filled out correctly.';					break;			}			alert( msg );		}	};	function vv_is_required( $f ) {		var v = vv_trim( $f.val() );		if ( $f.is( ':radio' ) || $f.is( ':checkbox' ) ) {			var attr = ( $f.is( ':checkbox' ) ) ? 'alt' : 'name';			if ( !$( 'input[' + attr + '=' + $f.attr( attr ) + ']:checked' ).length ) {				return false;			}		} else if ( $f.is( 'select' ) ) {			if ( vv_is_default( $f ) ) {				return false;			}		} else {			if ( v.length == 0 ) {				return false;		 	}		}	 	return true;	}	function vv_is_numeric( $f ) {		var v = vv_strip_whitespace( $f.val() );		if ( v.length > 0 && isNaN( v ) ) {			return false;		}		return true;	}	function vv_is_email( $f ) {		var v = vv_trim( $f.val() );		if ( v.length > 0 &&			( v.indexOf("@") == -1 || v.indexOf(".") == -1 || v.length < 7 )		) {			return false;		}		return true;	}	function vv_is_corresponding( $f ) {		if ( $f.val() != $('[name=' + $f.attr( 'alt' ) + ']').val() ) {			return false;		}		return true;	}	function vv_is_default( $f ) {		if ( vv_trim( $f.val() ) == $f.data( 'vv_defaultvalue' ) ) {			return true;		}		return false;	}	function vv_clear_defaultvalue( $f ) {		if ( $f.hasClass( vv_get_class( 'default' ) ) ) {			if ( vv_is_default( $f ) && !$f.is( 'select' )  ) {				$f.val( '' );				$f.removeClass( vv_get_class( 'inactive' ) );								if ( $f.data( 'vv_type' ) == 'password' ) {//					$f.attr( 'type', 'password' );				}			}		}	}	function vv_restore_defaultvalue( $f ) {		if ( $f.hasClass( vv_get_class( 'default' ) ) ) {			if ( vv_trim( $f.val() ) == '' && !$f.is( 'select' ) ) {				$f.val(  $f.data( 'vv_defaultvalue' ) );				$f.addClass( vv_get_class( 'inactive' ) );							if ( $f.data( 'vv_type' ) == 'password' ) {//					$f.attr( 'type', 'text' );				}			}		}	}	function vv_clear_formatvalue( $f ) {		if ( $f.hasClass( vv_get_class( 'formatted' ) ) ) {			$f.val( $f.data( 'vv_format_text' ) );		}	}	function vv_restore_formatvalue( $f ) {		if ( $f.hasClass( vv_get_class( 'formatted' ) ) ) {			var o = vv_strip_whitespace( $f.val() ),				v = $f.data( 'vv_format' );			$f.data( 'vv_format_text', o );			for ( var a = 0; a < o.length && a < v.length; a++ ) {				v = v.replace( '_', o[ a ] );			}			$f.val( v );		}	}	function vv_set_valid( $f, f, o ) {		if ( o.validFieldFunc ) {			o.validFieldFunc( $f, f, o.language );		}	}	function vv_set_invalid( $f, f, o ) {		if ( o.invalidFieldFunc ) {			o.invalidFieldFunc( $f, f, o.language );		}	}	function vv_get_class( cl ) {		if ( typeof clss != 'undefined' && typeof clss[ cl ] != 'undefined' ) return clss[ cl ];		return cl;	}	function vv_trim( str ) {		if ( typeof str == 'undefined' ) return '';		return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');	}	function vv_strip_whitespace( str ) {		str = vv_trim( str );		var r = [' ', '-', '+', '(', ')', '/', '\\'];		for ( var i in r ) {			str = str.split( r[ i ] ).join('');		}		return str;	}})(jQuery);
