function help_vError(event,t, act){
    var divName = 'dimage_help_error';
    var offX = 14;          // Posição X do mouse
    var offY = -10;          // Posição Y do mouse
    // define o tamanho que terá a div para não ultrapassar o espaço trabalhado
    var tam_tela = screen.width;
    var sobra = (tam_tela - 770)/2;
    var w = tam_tela - event.clientX - sobra - 70;
    
    function mouseX(evt) {if (!evt) evt = window.event; if (evt.pageX) return evt.pageX; else if (evt.clientX)return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return 0;};
    function mouseY(evt) {if (!evt) evt = window.event; if (evt.pageY) return evt.pageY; else if (evt.clientY)return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return 0;};
    
    function follow(evt) {
    if (document.getElementById){
    var obj = document.getElementById(divName).style;
    if (act == '1'){
    // define estilos da div
    obj.display = 'block';
    obj.left = (parseInt(mouseX(evt))+offX-93) + 'px';
    obj.top = (parseInt(mouseY(evt))+offY-95) + 'px';
    
    var pai = document.getElementById(divName);
    jQuery('#span_help_error').remove();
    jQuery(pai).append("<span class='msg_help_error' id='span_help_error' >"+t+"</span>")
    }else{obj.display = 'none';};};
    };
    document.onmousemove = follow;
};
// 
jQuery(function($){
        
        /*Process Mask*/
	var isIphone = (window.orientation != undefined),
		// browsers like firefox2 and before and opera doenst have the onPaste event, but the paste feature can be done with the onInput event.
		pasteEvent = (($.browser.opera || ($.browser.mozilla && parseFloat($.browser.version.substr(0,3)) < 1.9 ))? 'input': 'paste');
		
	$.event.special.paste = {
		setup: function() {
	    	if(this.addEventListener)
	        	this.addEventListener(pasteEvent, pasteHandler, false);
   			else if (this.attachEvent)
				this.attachEvent(pasteEvent, pasteHandler);
		},

		teardown: function() {
			if(this.removeEventListener)
	        	this.removeEventListener(pasteEvent, pasteHandler, false);
   			else if (this.detachEvent)
				this.detachEvent(pasteEvent, pasteHandler);
		}
	};
	
	// the timeout is set because we can't get the value from the input without it
	function pasteHandler(e){
		var self = this;
		e = $.event.fix(e || window.e);
		e.type = 'paste';
		// Execute the right handlers by setting the event type to paste
		setTimeout(function(){ $.event.handle.call(self, e); }, 1);
	};
        
        

	$.extend({
		mask : {
			
			// the mask rules. You may add yours!
			// number rules will be overwritten
			rules : {
				'z': /[a-z]/,
				'Z': /[A-Z]/,
				'a': /[a-zA-Z]/,
				'*': /[0-9a-zA-Z]/,
                                '©': /\D/,
				'@': /[0-9a-zA-ZçÇáàãâéèêíìóòôõúùü]/
			},
			
			// these keys will be ignored by the mask.
			// all these numbers where obtained on the keydown event
			keyRepresentation : {
				8	: 'backspace',
				9	: 'tab',
				13	: 'enter',
				16	: 'shift',
				17	: 'control',
				18	: 'alt',
				27	: 'esc',
				33	: 'page up',
				34	: 'page down',
				35	: 'end',
				36	: 'home',
				37	: 'left',
				38	: 'up',
				39	: 'right',
				40	: 'down',
				45	: 'insert',
				46	: 'delete',
				116	: 'f5',
				123 : 'f12',
				224	: 'command'
			},
			
			iphoneKeyRepresentation : {
				10	: 'go',
				127	: 'delete'
			},
			
			signals : {
				'+' : '',
				'-' : '-'
			},
			
			// default settings for the plugin
			options : {
				attr: 'alt', // an attr to look for the mask name or the mask itself
				mask: null, // the mask to be used on the input
				type: 'fixed', // the mask of this mask
				maxLength: -1, // the maxLength of the mask
				defaultValue: '', // the default value for this input
				signal: false, // this should not be set, to use signal at masks put the signal you want ('-' or '+') at the default value of this mask.
							   // See the defined masks for a better understanding.
				
				textAlign: true, // use false to not use text-align on any mask (at least not by the plugin, you may apply it using css)
				selectCharsOnFocus: true, // select all chars from input on its focus
				autoTab: false, // auto focus the next form element when you type the mask completely
				setSize: false, // sets the input size based on the length of the mask (work with fixed and reverse masks only)
				fixedChars : '[(),.:/ -]', // fixed chars to be used on the masks. You may change it for your needs!
				
				onInvalid : function(){},
				onValid : function(){},
				onOverflow : function(){}
			},
			
			// masks. You may add yours!
			// Ex: $.fn.setMask.masks.msk = {mask: '999'}
			// and then if the 'attr' options value is 'alt', your input should look like:
			// <input type="text" name="some_name" id="some_name" alt="msk" />
			masks : {
				'phone'				: { mask : '9999-9999' },
				'phone-us'			: { mask : '(999) 999-9999' },
				'cpf'				: { mask : '999.999.999-99' }, // cadastro nacional de pessoa fisica
				'cnpj'				: { mask : '99.999.999/9999-99' },
				'date'				: { mask : '39/19/9999' }, //uk date
				'date2'    			: { mask : '9999/19' },
				'cep'				: { mask : '99999-999' },
                                'ddd'				: { mask : '9999' },
				'time'				: { mask : '95:9999', type : 'reverse'},
				'cc'				: { mask : '9999 9999 9999 9999' }, //credit card masktenho, hoje tento que testar todo o sistema com a validação e a mascara, amanha e quarta mexer no vagas que ocorreu alguns problema, na quinta e sexta não sei ainda 
				'integer'			: { mask : '9', type : 'repeat' },
				'decimal'			: { mask : '99.99999999999999999999', type : 'reverse', defaultValue : '000' },
                                'text'                          : { mask : '©', type : 'repeat' }
			},
			
			init : function(){
				// if has not inited...
				if( !this.hasInit ){

					var self = this, i,
						keyRep = (isIphone)? this.iphoneKeyRepresentation: this.keyRepresentation;
						
					this.ignore = false;
			
					// constructs number rules
					for(i=0; i<=9; i++) this.rules[i] = new RegExp('[0-'+i+']');
				
					this.keyRep = keyRep;
					// ignore keys array creation for iphone or the normal ones
					this.ignoreKeys = [];
					$.each(keyRep,function(key){
						self.ignoreKeys.push( parseInt(key) );
					});
					
					this.hasInit = true;
				}
			},
			
			set: function(el,options){
				
				var maskObj = this,
					$el = $(el),
					mlStr = 'maxLength';
				
				options = options || {};
				this.init();
				
				return $el.each(function(){
					
					if(options.attr) maskObj.options.attr = options.attr;
					
					var $this = $(this),
						o = $.extend({}, maskObj.options),
						attrValue = $this.attr(o.attr),
						tmpMask = '';
						
					// then we look for the 'attr' option
					tmpMask = (typeof options == 'string')? options: (attrValue != '')? attrValue: null;
					if(tmpMask) o.mask = tmpMask;
					
					// then we see if it's a defined mask
					if(maskObj.masks[tmpMask]) o = $.extend(o, maskObj.masks[tmpMask]);
					
					// then it looks if the options is an object, if it is we will overwrite the actual options
					if(typeof options == 'object' && options.constructor != Array) o = $.extend(o, options);
					
					//then we look for some metadata on the input
					if($.metadata) o = $.extend(o, $this.metadata());
					
					if(o.mask != null){
						
						if($this.data('mask')) maskObj.unset($this);
						
						var defaultValue = o.defaultValue,
							reverse = (o.type=='reverse'),
							fixedCharsRegG = new RegExp(o.fixedChars, 'g');
						
						if(o.maxLength == -1) o.maxLength = $this.attr(mlStr);
						
						o = $.extend({}, o,{
							fixedCharsReg: new RegExp(o.fixedChars),
							fixedCharsRegG: fixedCharsRegG,
							maskArray: o.mask.split(''),
							maskNonFixedCharsArray: o.mask.replace(fixedCharsRegG, '').split('')
						});
						
						//setSize option (this is not removed from the input (while removing the mask) since this would be kind of funky)
						if((o.type=='fixed' || reverse) && o.setSize && !$this.attr('size')) $this.attr('size', o.mask.length);
						
						//sets text-align right for reverse masks
						if(reverse && o.textAlign) $this.css('text-align', 'left');
						
						if(this.value!='' || defaultValue!=''){
							// apply mask to the current value of the input or to the default value
							var val = maskObj.string((this.value!='')? this.value: defaultValue, o);
							//setting defaultValue fixes the reset button from the form
							this.defaultValue = val;
							$this.val(val);
						}
						
						// compatibility patch for infinite mask, that is now repeat
						if(o.type=='infinite') o.type = 'repeat';
						
						$this.data('mask', o);
						
						// removes the maxLength attribute (it will be set again if you use the unset method)
						$this.removeAttr(mlStr);
						
						// setting the input events
						$this.bind('keydown.mask', {func:maskObj._onKeyDown, thisObj:maskObj}, maskObj._onMask)
							.bind('keypress.mask', {func:maskObj._onKeyPress, thisObj:maskObj}, maskObj._onMask)
							.bind('keyup.mask', {func:maskObj._onKeyUp, thisObj:maskObj}, maskObj._onMask)
							.bind('paste.mask', {func:maskObj._onPaste, thisObj:maskObj}, maskObj._onMask)
							.bind('focus.mask', maskObj._onFocus)
// 							.bind('blur.mask', maskObj._onBlur)
							.bind('change.mask', maskObj._onChange);
					}
				});
			},
			
			//unsets the mask from el
			unset : function(el){
				var $el = $(el);
				
				return $el.each(function(){
					var $this = $(this);
					if($this.data('mask')){
						var maxLength = $this.data('mask').maxLength;
						if(maxLength != -1) $this.attr('maxLength', maxLength);
						$this.unbind('.mask')
							.removeData('mask');
					}
				});
			},
			
			//masks a string
			string : function(str, options){
				this.init();
				var o={};
				if(typeof str != 'string') str = String(str);
				switch(typeof options){
					case 'string':
						// then we see if it's a defined mask	
						if(this.masks[options]) o = $.extend(o, this.masks[options]);
						else o.mask = options;
						break;
					case 'object':
						o = options;
				}
				if(!o.fixedChars) o.fixedChars = this.options.fixedChars;

				var fixedCharsReg = new RegExp(o.fixedChars),
					fixedCharsRegG = new RegExp(o.fixedChars, 'g');
					
				// insert signal if any
				if( (o.type=='reverse') && o.defaultValue ){
					if( typeof this.signals[o.defaultValue.charAt(0)] != 'undefined' ){
						var maybeASignal = str.charAt(0);
						o.signal = (typeof this.signals[maybeASignal] != 'undefined') ? this.signals[maybeASignal] : this.signals[o.defaultValue.charAt(0)];
						o.defaultValue = o.defaultValue.substring(1);
					}
				}
				
				return this.__maskArray(str.split(''),
							o.mask.replace(fixedCharsRegG, '').split(''),
							o.mask.split(''),
							o.type,
							o.maxLength,
							o.defaultValue,
							fixedCharsReg,
							o.signal);
			},
			
			// all the 3 events below are here just to fix the change event on reversed masks.
			// It isn't fired in cases that the keypress event returns false (needed).
			_onFocus: function(e){
				var $this = $(this), dataObj = $this.data('mask');
				dataObj.inputFocusValue = $this.val();
				dataObj.changed = false;
				if(dataObj.selectCharsOnFocus) $this.select();
			},
			
			_onBlur: function(e){
				var $this = $(this), dataObj = $this.data('mask');
				if(dataObj.inputFocusValue != $this.val() && !dataObj.changed)
					$this.trigger('change');
                                $.validate.vBlur(this);
			},
			
			_onChange: function(e){
				$(this).data('mask').changed = true;
			},
			
			_onMask : function(e){
				var thisObj = e.data.thisObj,
					o = {};
				o._this = e.target;
				o.$this = $(o._this);
				// if the input is readonly it does nothing
				if(o.$this.attr('readonly')) return true;
				o.data = o.$this.data('mask');
				o[o.data.type] = true;
				o.value = o.$this.val();
				o.nKey = thisObj.__getKeyNumber(e);
				o.range = thisObj.__getRange(o._this);
				o.valueArray = o.value.split('');
				return e.data.func.call(thisObj, e, o);
			},
			
			_onKeyDown : function(e,o){
				// lets say keypress at desktop == keydown at iphone (theres no keypress at iphone)
				this.ignore = $.inArray(o.nKey, this.ignoreKeys) > -1 || e.ctrlKey || e.metaKey || e.altKey;
				if(this.ignore){
					var rep = this.keyRep[o.nKey];
					o.data.onValid.call(o._this, rep? rep: '', o.nKey);
				}
				return isIphone ? this._keyPress(e, o) : true;
			},
			
			_onKeyUp : function(e, o){
				//9=TAB_KEY 16=SHIFT_KEY
				//this is a little bug, when you go to an input with tab key
				//it would remove the range selected by default, and that's not a desired behavior
				if(o.nKey==9 || o.nKey==16) return true;
				
				if(o.data.type=='repeat'){
					this.__autoTab(o);
					return true;
				}

				return this._onPaste(e, o);
			},
			
			_onPaste : function(e,o){
				// changes the signal at the data obj from the input
				if(o.reverse) this.__changeSignal(e.type, o);
				
				var $thisVal = this.__maskArray(
					o.valueArray,
					o.data.maskNonFixedCharsArray,
					o.data.maskArray,
					o.data.type,
					o.data.maxLength,
					o.data.defaultValue,
					o.data.fixedCharsReg,
					o.data.signal
				);
				
				o.$this.val( $thisVal );
				// this makes the caret stay at first position when 
				// the user removes all values in an input and the plugin adds the default value to it (if it haves one).
				if( !o.reverse && o.data.defaultValue.length && (o.range.start==o.range.end) )
					this.__setRange(o._this, o.range.start, o.range.end);
					
				//fix so ie's and safari's caret won't go to the end of the input value.
				if( ($.browser.msie || $.browser.safari) && !o.reverse)
					this.__setRange(o._this,o.range.start,o.range.end);
				
				if(this.ignore) return true;
				
				this.__autoTab(o);
				return true;
			},
			
			_onKeyPress: function(e, o){
				
				if(this.ignore) return true;
				
				// changes the signal at the data obj from the input
				if(o.reverse) this.__changeSignal(e.type, o);
				
				var c = String.fromCharCode(o.nKey),
					rangeStart = o.range.start,
					rawValue = o.value,
					maskArray = o.data.maskArray;
				
				if(o.reverse){
					 	// the input value from the range start to the value start
					var valueStart = rawValue.substr(0, rangeStart),
						// the input value from the range end to the value end
						valueEnd = rawValue.substr(o.range.end, rawValue.length);
					
					rawValue = valueStart+c+valueEnd;
					//necessary, if not decremented you will be able to input just the mask.length-1 if signal!=''
					//ex: mask:99,999.999.999 you will be able to input 99,999.999.99
					if(o.data.signal && (rangeStart-o.data.signal.length > 0)) rangeStart-=o.data.signal.length;
				}

				var valueArray = rawValue.replace(o.data.fixedCharsRegG, '').split(''),
					// searches for fixed chars begining from the range start position, till it finds a non fixed
					extraPos = this.__extraPositionsTill(rangeStart, maskArray, o.data.fixedCharsReg);
				
				o.rsEp = rangeStart+extraPos;
				
				if(o.repeat) o.rsEp = 0;
				
				// if the rule for this character doesnt exist (value.length is bigger than mask.length)
				// added a verification for maxLength in the case of the repeat type mask
				if( !this.rules[maskArray[o.rsEp]] || (o.data.maxLength != -1 && valueArray.length >= o.data.maxLength && o.repeat)){
					// auto focus on the next input of the current form
					o.data.onOverflow.call(o._this, c, o.nKey);
					return false;
				}
				
				// if the new character is not obeying the law... :P
				else if( !this.rules[maskArray[o.rsEp]].test( c ) ){
					o.data.onInvalid.call(o._this, c, o.nKey);
					return false;
				}
				
				else o.data.onValid.call(o._this, c, o.nKey);
				
				var $thisVal = this.__maskArray(
					valueArray,
					o.data.maskNonFixedCharsArray,
					maskArray,
					o.data.type,
					o.data.maxLength,
					o.data.defaultValue,
					o.data.fixedCharsReg,
					o.data.signal,
					extraPos
				);
				
				o.$this.val( $thisVal );
				
				return (o.reverse)? this._keyPressReverse(e, o): (o.fixed)? this._keyPressFixed(e, o): true;
			},
			
			_keyPressFixed: function(e, o){

				if(o.range.start==o.range.end){
					// the 0 thing is cause theres a particular behavior i wasnt liking when you put a default
					// value on a fixed mask and you select the value from the input the range would go to the
					// end of the string when you enter a char. with this it will overwrite the first char wich is a better behavior.
					// opera fix, cant have range value bigger than value length, i think it loops thought the input value...
					if((o.rsEp==0 && o.value.length==0) || o.rsEp < o.value.length)
						this.__setRange(o._this, o.rsEp, o.rsEp+1);	
				}
				else
					this.__setRange(o._this, o.range.start, o.range.end);
					
				return true;
			},
			
			_keyPressReverse: function(e, o){
				//fix for ie
				//this bug was pointed by Pedro Martins
				//it fixes a strange behavior that ie was having after a char was inputted in a text input that
				//had its content selected by any range 
				if($.browser.msie && ((o.range.start==0 && o.range.end==0) || o.range.start != o.range.end ))
					this.__setRange(o._this, o.value.length);
				return false;
			},
			
			__autoTab: function(o){
				if(o.data.autoTab
					&& (
						(
							o.$this.val().length >= o.data.maskArray.length 
							&& !o.repeat 
						) || (
							o.data.maxLength != -1
							&& o.valueArray.length >= o.data.maxLength
							&& o.repeat
						)
					)
				){
					var nextEl = this.__getNextInput(o._this, o.data.autoTab);
					if(nextEl){
						o.$this.trigger('blur');
						nextEl.focus().select();
					}
				}
			},
			
			// changes the signal at the data obj from the input			
			__changeSignal : function(eventType,o){
				if(o.data.signal!==false){
					var inputChar = (eventType=='paste')? o.value.charAt(0): String.fromCharCode(o.nKey);
					if( this.signals && (typeof this.signals[inputChar] != 'undefined') ){
						o.data.signal = this.signals[inputChar];
					}
				}
			},
			
			__getKeyNumber : function(e){
				return (e.charCode||e.keyCode||e.which);
			},
			
			// this function is totaly specific to be used with this plugin, youll never need it
			// it gets the array representing an unmasked string and masks it depending on the type of the mask
			__maskArray : function(valueArray, maskNonFixedCharsArray, maskArray, type, maxlength, defaultValue, fixedCharsReg, signal, extraPos){
				if(type == 'reverse') valueArray.reverse();
				valueArray = this.__removeInvalidChars(valueArray, maskNonFixedCharsArray, type=='repeat'||type=='infinite');
				if(defaultValue) valueArray = this.__applyDefaultValue.call(valueArray, defaultValue);
				valueArray = this.__applyMask(valueArray, maskArray, extraPos, fixedCharsReg);
				switch(type){
					case 'reverse':
						valueArray.reverse();
						return (signal || '')+valueArray.join('').substring(valueArray.length-maskArray.length);
					case 'infinite': case 'repeat':
						var joinedValue = valueArray.join('');
						return (maxlength != -1 && valueArray.length >= maxlength)? joinedValue.substring(0, maxlength): joinedValue;
					default:
						return valueArray.join('').substring(0, maskArray.length);
				}
				return '';
			},
			
			// applyes the default value to the result string
			__applyDefaultValue : function(defaultValue){
				var defLen = defaultValue.length,thisLen = this.length,i;
				//removes the leading chars
				for(i=thisLen-1;i>=0;i--){
					if(this[i]==defaultValue.charAt(0)) this.pop();
					else break;
				}
				// apply the default value
				for(i=0;i<defLen;i++) if(!this[i])
					this[i] = defaultValue.charAt(i);
					
				return this;
			},
			
			// Removes values that doesnt match the mask from the valueArray
			// Returns the array without the invalid chars.
			__removeInvalidChars : function(valueArray, maskNonFixedCharsArray, repeatType){
				// removes invalid chars
				for(var i=0, y=0; i<valueArray.length; i++ ){
					if( maskNonFixedCharsArray[y] &&
						this.rules[maskNonFixedCharsArray[y]] &&
						!this.rules[maskNonFixedCharsArray[y]].test(valueArray[i]) ){
							valueArray.splice(i,1);
							if(!repeatType) y--;
							i--;
					}
					if(!repeatType) y++;
				}
				return valueArray;
			},
			
			// Apply the current input mask to the valueArray and returns it. 
			__applyMask : function(valueArray, maskArray, plus, fixedCharsReg){
				if( typeof plus == 'undefined' ) plus = 0;
				// apply the current mask to the array of chars
				for(var i=0; i<valueArray.length+plus; i++ ){
					if( maskArray[i] && fixedCharsReg.test(maskArray[i]) )
						valueArray.splice(i, 0, maskArray[i]);
				}
				return valueArray;
			},
			
			// searches for fixed chars begining from the range start position, till it finds a non fixed
			__extraPositionsTill : function(rangeStart, maskArray, fixedCharsReg){
				var extraPos = 0;
				while(fixedCharsReg.test(maskArray[rangeStart++])){
					extraPos++;
				}
				return extraPos;
			},
			
			__getNextInput: function(input, selector){
				var formEls = input.form.elements,
					initialInputIndex = $.inArray(input, formEls) + 1,
					$input = null,
					i;
				// look for next input on the form of the pased input
				for(i = initialInputIndex; i < formEls.length; i++){
					$input = $(formEls[i]);
					if(this.__isNextInput($input, selector))
						return $input;
				}
					
				var forms = document.forms,
					initialFormIndex = $.inArray(input.form, forms) + 1,
					y, tmpFormEls = null;
				// look for the next forms for the next input
				for(y = initialFormIndex; y < forms.length; y++){
					tmpFormEls = forms[y].elements;
					for(i = 0; i < tmpFormEls.length; i++){
						$input = $(tmpFormEls[i]);
						if(this.__isNextInput($input, selector))
							return $input;
					}
				}
				return null;
			},
			
			__isNextInput: function($formEl, selector){
				var formEl = $formEl.get(0);
				return formEl
					&& (formEl.offsetWidth > 0 || formEl.offsetHeight > 0)
					&& formEl.nodeName != 'FIELDSET'
					&& (selector === true || (typeof selector == 'string' && $formEl.is(selector)));
			},
			
			// http://www.bazon.net/mishoo/articles.epl?art_id=1292
			__setRange : function(input, start, end) {
				if(typeof end == 'undefined') end = start;
				if (input.setSelectionRange){
					input.setSelectionRange(start, end);
				}
				else{
					// assumed IE
					var range = input.createTextRange();
					range.collapse();
					range.moveStart('character', start);
					range.moveEnd('character', end - start);
					range.select();
				}
			},
			
			// adaptation from http://digitarald.de/project/autocompleter/
			__getRange : function(input){
				if (!$.browser.msie) return {start: input.selectionStart, end: input.selectionEnd};
				var pos = {start: 0, end: 0},
					range = document.selection.createRange();
				pos.start = 0 - range.duplicate().moveStart('character', -100000);
				pos.end = pos.start + range.text.length;
				return pos;
			}
		}
	});
        
        /*Process Validate*/
        $.vErrorClear = function(element){
            jQuery(element).find(".vError").each(function(){
                jQuery(this).parent().children('input,select,textarea').css('border',$.validate.options.vBorderDefault);
                jQuery(this).remove();});
        };

        function creat_DivError(){
            if(!$("div").hasClass("dimage_help_error"))
                $('.vForm').parents('div:first').after("<div id='dimage_help_error' class='dimage_help_error' ></div>");
        };

	$.extend({
		validate : {
                        options : {
                                vBorderDefault: "1px solid #191970", /*border-color in css*/
				vBorderError: "1px solid #CC0000", /*border-color in error validate*/
				spanColorDefault: "#191970", /*color span in css*/
				spanColorError: "#CC0000", /*color span in error validate*/
                                imgAlert: "../imagens/validacao/validacao.png" /*image of the error*/
			},

                        vMsg: {
                                msEmail: 'E-mail inválido.',
                                msInt: 'Campo aceita somente número.',
                                msText: 'Campo aceita somente texto.',
                                msDec: 'Campo deve estar no formato<br>(99999 ou 9999.99).',
                                msDate: 'Data deve estar no <br>formato(dd/mm/aaaa).',
                                msDate2: 'Data inválida.',
                                msDt: 'Data deve estar no formato<br>(aaaa/mm).',
                                msObg: 'Campo Obrigatório.',
                                msCep: 'CEP deve estar no formato<br>(#####-### ou ########).',
                                msCpf: 'CPF deve estar no formato<br>(999.999.999-99 ou 99999999999).',
                                msCnpj: 'CNPJ deve estar no formato<br>(99.999.999/9999-99 ou 99.999999999999).',
                                msCnpj2: 'CNPJ inválido.',
                                msDdd: 'DDD deve estar no formato<br>(99 ou 9999).',
                                msTel: 'Telefone inválido.',
                                msHora: 'Hora deve estar no <br>formato(hh:mm).',
                                msMinut: 'Tempo deve estar no <br>formato(mm:ss).',
                                msDupli: 'O valor inserido já está<br> cadastrado no sistema.',
                                msOut: 'Valor inválido.',
                                msGrup:'Selecione alguma opção.',
                                msnAlert: "* Há campos com inconsistências.\n\n   Obs: O icone '!' obtém a inconsistência do campo,\n\t   passe o mouse sobre ele para verificar a\n\t   inconsistência do campo. " /*message of the error*/
                        },

			vRules : {
                                vObg: function (val){
                                    val = $.trim(val);
                                    if(val.length>0)return true;
                                    return false;
                                },

                                vSelObg: function (val){
                                    val = val.replace(/^=+$/,"");
                                    if (val!="None" && val!="" && val!="0")return true;
                                    return false;
                                },
                                
                                vText: function (texto) {
                                    if(texto=="")return true;
                                    var texto_pattern = /^(\D)+$/;
                                    if(texto.match(texto_pattern)) return true;
                                    return false;
                                },
                                
                                vInt: function (number) {
                                    if(number=="")return true;
                                    var number_pattern = /^([0-9])+$/;
                                    if(number.match(number_pattern)) return true;
                                    return false;
                                },
                                
                                vDec: function (number) {
                                    if(number=="")return true;
                                    var number_pattern = /^(([0-9]+(\.[0-9]{1,2}))|([0-9]+))$/;
                                    if(number.match(number_pattern)) return true;
                                    return false;
                                },
                                
                                vData: function (date_passed) {
                                    if(date_passed=="")return true;
                                    var dat=/^\d{2}\/\d{2}\/\d{4}$/;
                                    if(!dat.test(date_passed))return false;
                                },
                                
                                vData2: function (date_passed) {
                                    if(date_passed=="")return true;
                                    var dat=/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|2\d)\d\d$/;
                                    if(!dat.test(date_passed))return false;
                                    dat=date_passed.split("/");
                                    var d = new Date(dat[1] + "/" + dat[0] + "/" + dat[2]);
                                    return d.getMonth() + 1 == dat[1] && d.getDate() == dat[0] && d.getFullYear() == dat[2];
                                },

                                vDt: function (date_passed){
                                    if(date_passed=="")return true;
                                    var dat=/^\d{4}\/\d{2}$/;
                                    if(!dat.test(date_passed))return false;
                                },

                                vDt2: function (date_passed){
                                    if(date_passed=="")return true;
                                    var dat=/^(19|2\d)\d\d\/(0[1-9]|1[012])$/;
                                    if(!dat.test(date_passed))return false;
                                    dat=date_passed.split("/");
                                    var d = new Date(dat[1] + "/" + dat[0] + "/" + dat[2]);
                                    return d.getMonth() + 1 == dat[1] && d.getDate() == dat[0] && d.getFullYear() == dat[2];

                                },
                                
                                vEmail: function (email){
                                    if(email=="")return true;
                                    var email_pattern  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
                                    if(email.match(email_pattern)) return true;
                                    return false;
                                },
                                
                                vHora: function (number){
                                    if(number=="")return true;
                                    var number_pattern = /^[0-9]{1,}:[0-5][0-9]$/;
                                    if(number.match(number_pattern)) return true;
                                    return false;
                                },
                                
                                vCEP: function (number) {
                                    if(number=="")return true;
                                    var number_pattern = /^[-+]?(([0-9]{5}\-[0-9]{3})+|[0-9]{8})$/;
                                    if(number.match(number_pattern)) return true;
                                    return false;
                                },
                                    
                                vCPF: function (number) {
                                    if(number=="")return true;
                                    var number_pattern = /^[-+]?(([0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2})+|[0-9]{11})$/;
                                    if(number.match(number_pattern)) return true;
                                    return false;
                                },
                                    
                                vCNPJ: function (number) {
                                    if(number=="")return true;
                                    var number_pattern = /^[-+]?(([0-9]{2}\.[0-9]{3}\.[0-9]{3}\/[0-9]{4}\-[0-9]{2})+|[0-9]{14})$/;
                                    if(number.match(number_pattern)) return true;
                                    return false;

                                            



                                },

                                vCNPJ2: function (cnpj) {
                                    var valida = new Array(6,5,4,3,2,9,8,7,6,5,4,3,2);
                                    var dig1= new Number;
                                    var dig2= new Number;
                                
                                    exp = /\.|\-|\//g
                                    cnpj = cnpj.toString().replace( exp, "" );
                                    var digito = new Number(eval(cnpj.charAt(12)+cnpj.charAt(13)));
                                
                                    for(i = 0; i<valida.length; i++){
                                        dig1 += (i>0? (cnpj.charAt(i-1)*valida[i]):0);    
                                        dig2 += cnpj.charAt(i)*valida[i];    
                                    }
                                    dig1 = (((dig1%11)<2)? 0:(11-(dig1%11)));
                                    dig2 = (((dig2%11)<2)? 0:(11-(dig2%11)));
                                
                                    if(((dig1*10)+dig2) != digito)return false
                                    else return true;
                                },

                                vDDD: function (number){
                                    number = number.replace(/^\s+$/,"")
                                    if(number=="")return true;
                                    var number_pattern = /^([0-9]{2,4})$/;
                                    if(number.match(number_pattern)) return true;
                                    return false;
                                },
                                
                                vTel: function (number){
                                    if(number=="")return true;
                                    var number_pattern =/^[0-9]{4}-?[0-9]{3,4}$/;
                                    if(number.match(number_pattern)) return true;
                                    return false;
                                }
			},

                        _focusFirstFieldError: function (element){
                            windowTop=$(window).scrollTop();
                            
                            if($(element).hasClass("text") || $(element).hasClass("password")){
                                elementTop=$(element).children("input").offset().top - 100;
                                if(windowTop > elementTop)$(window).scrollTop(elementTop);
                                $(element).children("input").focus();
                                if($.browser.msie)$(element).children("input").select();};
                            if($(element).hasClass("select")){
                                elementTop=$(element).children("select").offset().top - 100;
                                if(windowTop > elementTop)$(window).scrollTop(elementTop);
                                $(element).children("select").focus();
                                if($.browser.msie)$(element).children("select").select();};
                            if($(element).hasClass("textarea")){
                                elementTop=$(element).children("textarea").offset().top - 100;
                                if(windowTop > elementTop)$(window).scrollTop(elementTop);
                                $(element).children("textarea").focus();
                                if($.browser.msie)$(element).children("textarea").select();};
                            if($(element).hasClass("vGrup")){
                                $(element).find("input[type=radio]:first,input[type=checkbox]:first").each(function(){
                                    elementTop=$(this).offset().top - 100;
                                    if(windowTop > elementTop)$(window).scrollTop(elementTop - 35);
                                    $(this).focus();});};
                        },
                        
                        focusFirstFieldError: function (element){
                            sf = $.validate;
                            classes=$(element).attr('class')
                            if(classes.indexOf('gvSaved')>-1){
                                $(element).find(".vError:first").parents(".text,.password,.select,.textarea,.vGrup").each(function(){sf._focusFirstFieldError(this);});
                                
                            }else{
                                $(".vError:first").parents(".text,.password,.select,.textarea,.vGrup").each(function(){sf._focusFirstFieldError(this);});
                            };
                        },

                        add_vError: function(el, msn,temDupli){
                            mgn= 'margin:5px 0 0 -8px';
                            if(el.is('select') && $.browser.safari)mgn= 'margin:2px 0 0 -8px';
                            if(temDupli==null)temDupli=''

                            el.before("<img class='vError "+temDupli+"' src='"+this.options.imgAlert+"' style='position:relative;float:left;"+mgn+";cursor:pointer;' onmouseover='help_vError(event,\""+msn+"\",1)' onmouseout='help_vError(event,\""+msn+"\",2)' />");
                            el.css('border', this.options.vBorderError);
                            el.parent().children("span").css('color', this.options.spanColorError);
                        },
                        
                        add_vErrorG: function (typ,el, message){
                            padding=''
                            creat_img="<img class='vError' src='../imagens/validacao/validacao.png' style='"+padding+"margin-top:-3px;cursor:pointer;' onmouseover='help_vError(event,\""+message+"\",1)' onmouseout='help_vError(event,\""+message+"\",2)' />"
                            
                            if(typ==1){
                                el.append(creat_img);
                                el.css({color: this.options.spanColorError});};
                            if(typ==2){
                                if(el.children().is("legend")){
                                    padding='padding-left:2px';
                                    el.children('legend').append(creat_img);
                                    el.css('border', this.options.vBorderError);};
                            };
                        },

                        vDuplic: function (el){
                            /*
                            type="A": serve para verificação simples, verificação de apenas 1 campo no sql;
                            type="B": serve para verificação de 2 campos no sql;
                            type="C": essa função serve para verificação de 2 campos no sql, porem um caso especial, por exemplo um campo como cdfuncsubID da tabela Funcsub, no banco de dados não tem ID mais o lasagna coloca o ID no campo para não dar problema é tirado esse ID no sql
                            */
                        
                            if(el.className.indexOf("vDupliA#")>-1)typ="A";
                            if(el.className.indexOf("vDupliB#")>-1)typ="B";
                            if(el.className.indexOf("vDupliC#")>-1)typ="C";
                            
                            classe=el.className.substr(el.className.indexOf("vDupli")).split(" ")[0];
                            lista = classe.split('#')
                            tabela = lista[1].toString();
                            campo_id= $('[name=id]').val();
                            campo_aux=0;
                            valor_aux=0;
                            
                            if(typ=="B"||typ=="C"){
                                campo_aux=lista[2].replace(/([A-Z])([a-z])/,"_$1$2").replace("ID","_id").toString();
                                valor_aux=$('[name='+lista[2].toString()+']').val();
                            };

                            $(el).children("input,select").each(function (){
                                itemtipo = "A";
                                if(this.tagName=="SELECT")itemtipo = "B";
                                valor = this.value.toString();
                                if($(this).parents().hasClass('vCPF'))valor = valor.replace('.','').replace('.','').replace('-','')
                                if($(this).parents().hasClass('vCNPJ'))valor = valor.replace('.','').replace('.','').replace('/','').replace('-','')

                                if(typ=="A"){
                                    if(this.name.indexOf('ID')>-1)campo = this.name.toString().replace("ID","_id").toLowerCase();
                                    else campo = this.name.toString().replace(/([A-Z])([a-z])/,"_$1$2").toLowerCase();};
                        
                                if(typ=="B"){
                                    campo = this.name.toString();
                                    if(this.tagName=="SELECT")campo = campo.replace("ID","_id");
                                    if(this.tagName=="INPUT"){
                                        if(this.name.indexOf('ID')>-1)campo = this.name.toString().replace("ID","_id").toLowerCase();
                                        else campo = this.name.toString().replace(/([A-Z])([a-z])/,"_$1$2").toLowerCase();};
                                    };
                        
                                if(typ=="C"){
                                    if(this.tagName=="SELECT")campo = this.name.toString().replace("ID","");
                                    else campo = this.name.replace('ID','');};
                            });
                            
                            if(campo_id>=0 && campo!='' && valor!=''){
                                var temDupli = eval($.ajax({
                                    url: "../control/ajax/validacao.pt",
                                    data: {tipo:typ,itemtipo:itemtipo,tabla:tabela,campo_id:campo_id,campo:campo,valor:valor, campo_aux:campo_aux,valor_aux:valor_aux},
                                    async: false
                                }).responseText);
                                if(typ=="A")list = [temDupli,false];
                                else list = [temDupli,lista[2]];
                                return list
                            }else{return [false,false];};
                        },

                        vDuplicidade: function (elem,el,typ,retorno){
                            if($(elem).hasClass('vOut'))mensagem=this.vMsg.msOut
                            else mensagem=this.vMsg.msDupli

                            vDupli = this.vDuplic(elem)
                            
                            if(vDupli[0]){
                                $(elem).find(".vError").remove();
                                if(typ=='input')this.add_vError(el, mensagem,'vTemDupli');
                                else this.add_vError($(elem).children("select"), mensagem,'vTemDupli');
                                if(vDupli[1]){
                                    if($('[name='+vDupli[1].toString()+']').attr('type')!='hidden' && $('[name='+vDupli[1].toString()+']').attr('display')!=''){
                                        $('[name='+vDupli[1].toString()+']').find(".vError").remove();
                                        this.add_vError($('[name='+vDupli[1].toString()+']'), mensagem, 'vTemDupli');};
                                };
                                retorno = false;
                            }else if(vDupli[1])$.vErrorClear($('[name='+vDupli[1].toString()+']').parent());
                            return retorno;
                        },

                        _vBlur: function (el,retorno,classe,funcao,msn){
                            elP = $(el).parent();
                            if(elP.hasClass(classe)){
                                //elP.find(".vError").remove();
                                if(!elP.hasClass("vObrigatorio")){elP.find(".vError").remove();elP.children("span").css('color',this.options.spanColorDefault);};
                                if(!funcao($(el).val())){this.add_vError($(el),msn);retorno=false;};
                            };
                            return retorno;
                        },

                        vBlur: function(el) {
                            creat_DivError();
                            var obrig=false;
                            var valid;
                            tagName = el.tagName;
                            elP = $(el).parent();

                            if(tagName=="INPUT" || tagName=="TEXTAREA" || tagName=="SELECT"){
                                if(elP.hasClass("vObrigatorio") || elP.hasClass("vSelect")){
                                    if (el.parentNode.className.indexOf("vDupli")>-1 && elP.find(".vError").hasClass('vTemDupli')){
                                        elP.find(".vError").remove();
                                        this.add_vError($(el),this.vMsg.msDupli,'vTemDupli');
                                    }else{elP.find(".vError").remove();};

                                    elP.children("span").css('color', this.options.spanColorError);
                                    if(tagName=="SELECT")obrig_value = this.vRules.vSelObg($(el).val());
                                    else obrig_value = this.vRules.vObg($(el).val());
                                    if(!obrig_value){this.add_vError($(el),this.vMsg.msObg);obrig=true;valid=false;};
                                };
                            };
                            
                            if(tagName=="INPUT"){
                                if(!obrig){
                                    valid = this._vBlur(el,valid,"vEmail",this.vRules.vEmail,this.vMsg.msEmail);
                                    valid = this._vBlur(el,valid,"vNumero",this.vRules.vInt,this.vMsg.msInt);
                                    valid = this._vBlur(el,valid,"vDecimal",this.vRules.vDec,this.vMsg.msDec);
                                    valid = this._vBlur(el,valid,"vCEP",this.vRules.vCEP,this.vMsg.msCep);
                                    valid = this._vBlur(el,valid,"vCPF",this.vRules.vCPF,this.vMsg.msCpf);
                                    valid = this._vBlur(el,valid,"vDDD",this.vRules.vDDD,this.vMsg.msDdd);
                                    valid = this._vBlur(el,valid,"vTel",this.vRules.vTel,this.vMsg.msTel);
                                    valid = this._vBlur(el,valid,"vHora",this.vRules.vHora,this.vMsg.msHora);

                                    if(this.vRules.vCNPJ($(el).val())==false){valid=this._vBlur(el,valid,"vCNPJ",this.vRules.vCNPJ,this.vMsg.msCnpj);}
                                    else{                                     valid=this._vBlur(el,valid,"vCNPJ",this.vRules.vCNPJ2,this.vMsg.msCnpj2);};

                                    if(this.vRules.vData($(el).val())==false){
                                        valid = this._vBlur(el,valid,"vData",this.vRules.vData,this.vMsg.msDate);}
                                    else{
                                        valid = this._vBlur(el,valid,"vData",this.vRules.vData2,this.vMsg.msDate2);};

                                    if(this.vRules.vDt($(el).val())==false)
                                        valid = this._vBlur(el,valid,"vDt",this.vRules.vDt,this.vMsg.msDt)
                                    else
                                        valid = this._vBlur(el,valid,"vDt",this.vRules.vDt2,this.vMsg.msDate2);
                                };
                            };
                            if(tagName=="SELECT"){
                                if(elP.hasClass("vSelect") || elP.hasClass("vObrigatorio")){
                        
                                    if (el.parentNode.className.indexOf("vDupli")>-1 && elP.find(".vError").hasClass('vTemDupli')){
                                        elP.find(".vError").remove();
                                        this.add_vError($(el),this.vMsg.msDupli,'vTemDupli');
                                    }else{elP.find(".vError").remove();};
                        
                                    elP.children("span").css('color', this.options.spanColorError);
                                    if(!this.vRules.vSelObg($(el).val())){
                                        this.add_vError($(el),this.vMsg.msObg);
                                        obrig=true;valid=false;};};
                            };
                            
                            if(!obrig && el.parentNode.className.indexOf("vDupli")>-1 && elP.find(".vError").hasClass('vTemDupli'))
                                valid=false;
                        },
                        
                        vGBlur: function(el){
                            creat_DivError();
                            sf = $.validate;
                            if($(el).parents().is('fieldset.vGrup')){
                                if(!$(el).parents("fieldset").find("img").is(".vError")){
                                    temch=false;
                                    $(el).parents("fieldset").find("input").each(function(){if($(this).is(":checked"))temch=true;});
                                    if(!temch){
                                        sf.add_vErrorG(2,$(el).parents("fieldset"),sf.vMsg.msGrup);
                                        valid=false;
                                    }else{
                                        $(el).parents("fieldset").find(".vError").remove();
                                        $(el).parents("fieldset").css('border', sf.options.vBorderDefault);};
                                };
                            };
                        },
                        
                        vGClick: function(el){
                            creat_DivError();
                            if($(el).parents().is('table.vGrup')){
                                
                                cellIndex = $(el).parent('td').attr('cellIndex')
                                temch=false;
                                $('table.vGrup tr').find('td:eq('+cellIndex+')').children("input:checked").each(function(){temch=true;})
                                
                                if(temch){
                                    if($(el).parents('table.vGrup th:eq('+cellIndex+')').find('img').is(".vError")){
                                        $(el).parents('table.vGrup th:eq('+cellIndex+')').find(".vError").remove();
                                        $(el).parents('table.vGrup th:eq('+cellIndex+')').css('color','white');};
                                }else{
                                    if(!$(el).parents('table.vGrup th:eq('+cellIndex+')').find('img').is(".vError")){
                                        this.add_vErrorG(1,$(el).parents('table.vGrup th:eq('+cellIndex+')'),this.vMsg.msGrup);
                                        alert($.validate.vMsg.msnAlert);
                                        this.focusFirstFieldError($(el).parents('table.vGrup td:eq('+cellIndex+')'))};
                                };
                            };
                        
                            if($(el).parents().is('fieldset.vGrup')){
                                temch=false;
                                $(el).parents("fieldset").find("input").each(function(){if($(this).is(":checked"))temch=true;});
                                if(!temch){this.add_vErrorG(2,$(el).parents("fieldset"),this.vMsg.msGrup);
                                }else{$(el).parents("fieldset").find(".vError").remove();$(el).parents("fieldset").css('border', this.options.vBorderDefault);};
                            };
                        },
                        
                        _vSubmit: function (element,el,valor,retorno,classe,funcao,message){
                            if($(element).hasClass(classe)){
                                if(!funcao(valor)){
                                    $(element).find(".vError").remove();
                                    this.add_vError(el, message);
                                    retorno = false;};
                            };
                            return retorno;
                        },
                        
                        vSubmit: function (elem){
                            sf = $.validate;
                            var obrig=false;
                            var valid=true;
                        
                            $(elem).find(".text,.password,.select,.textarea,.vGrup").each(function(){
                                var elAtivado = false;
                                camp = $(this)
                                if(camp.css('display')=='none')elAtivado=true;
                                if(!elAtivado){
                                    camp.parents('fieldset,div').each(function (){if(camp.css('display')=='none')elAtivado=true;});
                                };
                            
                                if(!camp.children().is('select:disabled,input:disabled,password:disabled')&&!elAtivado){
                                    if(camp.hasClass("text") || camp.hasClass("password")){
                            
                                        if(this.tagName.toLowerCase()=="input"){el=camp;elVal=camp.val();
                                        }else{
                                            if(camp.children().is("input")){el=camp.children("input");   elVal=camp.children("input").val();};};
                            
                                        if(camp.hasClass("vObrigatorio")){
                                            if(!sf.vRules.vObg(elVal)){
                                                camp.find(".vError").remove();
                                                sf.add_vError(el,sf.vMsg.msObg);
                                                valid=false;
                                                obrig=true;};};
                        
                                        if(!obrig){
                                            valid = sf._vSubmit(this,el,elVal,valid,"vTexto",sf.vRules.vText,sf.vMsg.msText);
                                            valid = sf._vSubmit(this,el,elVal,valid,"vNumero",sf.vRules.vInt,sf.vMsg.msInt);
                                            valid = sf._vSubmit(this,el,elVal,valid,"vDecimal",sf.vRules.vDec,sf.vMsg.msDec);

                                            if(sf.vRules.vData(elVal)==false){
                                                 valid = sf._vSubmit(this,el,elVal,valid,"vData",sf.vRules.vData,sf.vMsg.msDate);}
                                            else{
                                                valid = sf._vSubmit(this,el,elVal,valid,"vData",sf.vRules.vData2,sf.vMsg.msDate2);};
                                            
                                            if(sf.vRules.vDt(elVal)==false){
                                                valid = sf._vSubmit(this,el,elVal,valid,"vDt",sf.vRules.vDt,sf.vMsg.msDt);}
                                            else{
                                                valid = sf._vSubmit(this,el,elVal,valid,"vDt",sf.vRules.vDt2,sf.vMsg.msDate2);};

                                            valid = sf._vSubmit(this,el,elVal,valid,"vEmail",sf.vRules.vEmail,sf.vMsg.msEmail);
                                            valid = sf._vSubmit(this,el,elVal,valid,"vHora",sf.vRules.vHora,sf.vMsg.msHora);
                                            valid = sf._vSubmit(this,el,elVal,valid,"vCEP",sf.vRules.vCEP,sf.vMsg.msCep);
                                            valid = sf._vSubmit(this,el,elVal,valid,"vCPF",sf.vRules.vCPF,sf.vMsg.msCpf);
                                            valid = sf._vSubmit(this,el,elVal,valid,"vCNPJ",sf.vRules.vCNPJ,sf.vMsg.msCnpj);
                                            valid = sf._vSubmit(this,el,elVal,valid,"vDDD",sf.vRules.vDDD,sf.vMsg.msDdd);
                                            valid = sf._vSubmit(this,el,elVal,valid,"vTel",sf.vRules.vTel,sf.vMsg.msTel);
                            
                                            if(this.className.indexOf("vDupli")>-1 && valid){
                                                valid = sf.vDuplicidade(this,el,"input",valid);
                                            };};
                                    };
                                    
                                    if(camp.hasClass("select")){
                                        if(camp.hasClass("vSelect") || camp.hasClass("vObrigatorio")){
                                            if(this.tagName.toLowerCase()=="select"){
                                                if(!sf.vRules.vSelObg(camp.val())){
                                                    camp.find(".vError").remove();
                                                    sf.add_vError(camp,sf.vMsg.msObg);
                                                    valid=false;
                                                    obrig=true;};
                                            }else{
                                                if(camp.children().is("select")){
                                                    if(!sf.vRules.vSelObg(camp.children("select").val())){
                                                        camp.find(".vError").remove();
                                                        sf.add_vError(camp.children("select"), sf.vMsg.msObg);
                                                        valid=false;
                                                        obrig=true;};};};
                                        };
                            
                                        if(!obrig && this.className.indexOf("vDupli")>-1 && valid){valid=sf.vDuplicidade(this,false,'select',valid);};
                                    };
                                    
                                    if(camp.hasClass("textarea")){
                                        if(camp.hasClass("vObrigatorio")){
                                            if(this.tagName.toLowerCase()=="textarea"){
                                                if(!sf.vRules.vObg(camp.val())){
                                                    camp.find(".vError").remove();
                                                    sf.add_vError(camp,sf.vMsg.msObg);
                                                    valid=false;};
                                            }else{
                                                if(camp.children().is("textarea")){
                                                    if(!sf.vRules.vObg(camp.children("textarea").val())){
                                                        camp.find(".vError").remove();
                                                        sf.add_vError(camp.children("textarea"),sf.vMsg.msObg);
                                                        valid=false;};};};
                                        };
                                    };
                                    
                                    if(camp.hasClass("vGrup")){
                                        if(this.tagName=="TABLE"){
                                            cellIndex = camp.children().find(':radio,:checkbox').parent('td').attr('cellIndex')
                                            temch=false;
                                            $('table.vGrup tr').find('td:eq('+cellIndex+')').children("input:checked").each(function(){temch=true;})
                                            if(temch){
                                                if(camp.find('th:eq('+cellIndex+')').find('img').is(".vError")){
                                                    camp.find('th:eq('+cellIndex+')').find(".vError").remove();
                                                    camp.find('th:eq('+cellIndex+')').css('color','white');};
                                            }else{
                                                if(!camp.find('th:eq('+cellIndex+')').find('img').is(".vError"))
                                                    sf.add_vErrorG(1,camp.find('th:eq('+cellIndex+')'),sf.vMsg.msGrup);
                                                sf.focusFirstFieldError(camp.find('td:eq('+cellIndex+')'));
                                                valid=false;
                                            };
                                        };
                        
                                        if(this.tagName=="FIELDSET"){
                                            temch=false;
                                            if(camp.find("input[type=checkbox]").is(":checked"))temch=true;
                                            if(camp.find("input[type=radio]").is(":checked"))temch=true;
                                            camp.css('border',sf.options.vBorderDefault);
                                            if(!temch){
                                                camp.find(".vError").remove();
                                                sf.add_vErrorG(2,camp,sf.vMsg.msGrup);
                                                valid=false;};};
                                    };
                                };
                            });
                            if(valid==false)sf.focusFirstFieldError(elem);
                            return valid;
                        }
                    }
        });
	
	$.fn.extend({
		setMask : function(options){return $.mask.set(this, options);},
		unsetMask : function(){return $.mask.unset(this);},
                setValid : function(options){return $.validate(this,options);}
	});

if($(document).find(".vForm").length>0){
    $(".vSaved").click(function(event){
        creat_DivError();
        if($(this).parents('.gvSaved').length>0){
            validado = $.validate.vSubmit($(this).parents('.gvSaved'));
            if(!validado){
                alert($.validate.vMsg.msnAlert);
                $.modal.close();
            }
            return validado;

        }else{
            validado = $.validate.vSubmit($(this).parents('.vForm'));
            if(!validado){
                alert($.validate.vMsg.msnAlert);
                $.modal.close();
            }
            return validado;
        };
    });
    $("input,select,textarea").change(function(){
        elP = $(this).parent()
        if(elP.find("img").hasClass("vTemDupli")){
            if(!elP.hasClass("vSelect") && !elP.hasClass("vObrigatorio"))
                elP.children("span").css('color',  $.validate.options.spanColorDefault);
            elP.find(".vError").remove();};});
    $("input,select,textarea").blur(function(){$.validate.vBlur(this);});
    $("table.vGrup input[type=checkbox]:,fieldset.vGrup input").click(function(){$.validate.vGClick(this);});
    $("table.vGrup input[type=checkbox], fieldset.vGrup input").blur(function(){$.validate.vGBlur(this);});

    $(this).find('.vData>input').setMask('date');
    $(this).find('.vDt>input').setMask('date2');
    $(this).find('.vHora>input').setMask('time');
    $(this).find('.vTel>input').setMask('phone');
    $(this).find('.vCNPJ>input').setMask('cnpj');
    $(this).find('.vCPF>input').setMask('cpf');
    $(this).find('.vCEP>input').setMask('cep');
    $(this).find('.vDDD>input').setMask('ddd');
    $(this).find('.vNumero>input').setMask('integer');
    $(this).find('.vDecimal>input').setMask('decimal');
    $(this).find('.vText>input').setMask('text');
};

});
