//########################## INÍCIO DO OBJETO filtering() ######################################
function filtering(idForm,ifTrueAction){
	/*
	*@author Fabrizio Silva Marmitt
	*@description objeto que executa os métodos do objeto FilterForms() de maneira prática e agilizada. Compatível com qualquer tipo de formulário	
	*@observation para funcionar adequadamente, este objeto necessita de um import dos arquivos: class.filterForms.js e lib.functions.js
	*/
	
	this._form = document.getElementById(idForm);
	
	__object = new FilterForms(idForm);	
	
	fieldsToFilter = new Array();
	
	this.elements = this._form.elements;
	this.elementsLength = this.elements.length;
	
	this.filter = function(fieldName,filterType,params,ifTrue,ifFalse,ifBlank){
		
		_toFilter = new Array(5);
		_toFilter[0] = fieldName; _toFilter[1] = filterType; _toFilter[2] = params; _toFilter[3] = ifTrue; _toFilter[4] = ifFalse;
		fieldsToFilter.push(_toFilter);
		
		if(typeof(ifBlank) != 'boolean'){
			ifBlank = true;	
		}
		
		if(typeof(fieldName) == 'undefined' || fieldName.length == 0 || typeof(filterType) == 'undefined' || filterType.length == 0){
			return false;	
		}
		
		if(typeof(params) != 'undefined' && params.length > 0){			
			if((_pos = params.indexOf('\\,')) > -1){
				params = params.substring(0,_pos) + '&vir;' + params.substring(_pos+2); 					
			}			
			
			params = explode(',',params);
			
			for(x=0;x<params.length;x++){
				if(trim(params[x]) == '&vir;'){
					params[x] = ',';
				}	
			}
		}else{
			params = new Array();	
		}
		
		for(x=0;x<this.elementsLength;x++){
			if(this.elements[x].name == fieldName){
				element = this.elements[x];
			}
		}
		
		switch(filterType){
			case 'filterName':						
				element.onblur = function(){					
					this.value = trim(this.value);							
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterName(this.value,params[0],params[1],ifTrue,ifFalse);
						if(check !== true){
							alert(check);	
						}
					}
				};				
				break;
			case 'filterSizeField':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterSizeField(this.value,params[0],params[1],ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterDate':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterDate(this.value,params[0],ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterURL':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterURL(this.value,ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterIntNumber':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterIntNumber(this.value,ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterFloatNumber':
				element.onblur = function(){					
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterFloatNumber(this.value,ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterNumberFormat':						
				element.onblur = function(){												
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterNumberFormat(this.value,params[0],params[1],params[2],ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterFileType':
				element.onblur = function(){
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterFileType(this.value,params[0],params[1],ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterPhone':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterPhone(this.value,params[0],ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterPostCode':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterPostCode(this.value,params[0],ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterAlphaCaracters':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterAlphaCaracters(this.value,ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;					
			case 'filterCPF':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterCPF(this.value,ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterCNPJ':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterCNPJ(this.value,ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'regExp':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.regExp(this.value,params[0],ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			case 'filterEmail':
				element.onblur = function(){
					this.value = trim(this.value);
					if(!ifBlank && this.value.length == 0){
						return false;	
					}else{
						check = __object.filterEmail(this.value,ifTrue,ifFalse);
						if(check != true){
							alert(check);	
						}
					}
				};
				break;
			default: return false;
		}
		
	};/*fim do método filter*/
	
	this._form.onsubmit = function(){				
		
		__error = false;/*default: no errors*/
		__alert = false;/*default: no alerts displayed yet*/
			
		for(a=0;a<fieldsToFilter.length;a++){			
			
			elements = this.elements;			
			elementsLength = elements.length;			
			filterType = fieldsToFilter[a][1];
			ifTrue = fieldsToFilter[a][3];
			ifFalse = fieldsToFilter[a][4];
			
			if(typeof(fieldsToFilter[a][2]) != 'undefined' && fieldsToFilter[a][2].length > 0){
				params = explode(',',fieldsToFilter[a][2]);
			}else{
				params = new Array();	
			}
			
			for(i=0;i<elementsLength;i++){
				if(elements[i].name == fieldsToFilter[a][0]){
					element = elements[i];					
				}/*end of if then else*/				
			}/*end of for*/	
			
			switch(filterType){
				case 'filterName':
					element.value = trim(element.value);							
					check = __object.filterName(element.value,params[0],params[1],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}
					break;
				case 'filterSizeField':
					element.value = trim(element.value);
					check = __object.filterSizeField(element.value,params[0],params[1],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}
				break;
				case 'filterDate':
					element.value = trim(element.value);
					check = __object.filterDate(element.value,params[0],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}
					break;
				case 'filterURL':
					element.value = trim(element.value);
					check = __object.filterURL(element.value,ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}							
					break;
				case 'filterIntNumber':
					element.value = trim(element.value);
					check = __object.filterIntNumber(element.value,ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterFloatNumber':
					element.value = trim(element.value);
					check = __object.filterFloatNumber(element.value,ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterNumberFormat':
					element.value = trim(element.value);
					check = __object.filterNumberFormat(element.value,params[0],params[1],params[2],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterFileType':					
					check = __object.filterFileType(element.value,params[0],params[1],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterPhone':
					element.value = trim(element.value);
					check = __object.filterPhone(element.value,params[0],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterPostCode':
					element.value = trim(element.value);
					check = __object.filterPostCode(element.value,params[0],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterAlphaCaracters':
					element.value = trim(element.value);
					check = __object.filterAlphaCaracters(element.value,ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterRadioField':
					element.value = trim(element.value);
					check = __object.filterRadioField(element.name,ifTrue,ifFalse);							
					if(check != ifTrue && check != true && !__alert){								
						alert(check);
						__error = true;
						__alert = true;
					}else if(check != true){
						alert(check);								
					}
					break;
				case 'filterCheckBoxField':
					element.value = trim(element.value);
					check = __object.filterCheckBoxField(element.name,params[0],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){								
						alert(check);
					}	
					break;
				case 'filterSelectField':
					element.value = trim(element.value);
					check = __object.filterSelectField(element.name,params[0],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterCPF':					
					element.value = trim(element.value);
					check = __object.filterCPF(element.value,ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterCNPJ':
					element.value = trim(element.value);
					check = __object.filterCNPJ(element.value,ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'regExp':
					element.value = trim(element.value);
					check = __object.regExp(element.value,params[0],ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				case 'filterEmail':
					element.value = trim(element.value);
					check = __object.filterEmail(element.value,ifTrue,ifFalse);
					if(check != ifTrue && check != true){
						alert(check);
						__error = true;
					}else if(check != true){
						alert(check);
					}	
					break;
				default: _error = true;
			}/*end of switch case*/
		}/*end of for*/
		
		
		if(__error){/*check any errors*/
			return false;
		}else{
			if(typeof(ifTrueAction) == 'undefined' || ifTrueAction == 'SUBMIT'){
				return true;	
			}else if(ifTrueAction = 'AJAX'){
				
				this.elementsLen = this.elements.length
				
				this.send = new String();
				
				for(x=0;x<this.elementsLen;x++){					
					if(this.elements[x].type == 'radio' && this.elements[x].checked == true || this.elements[x].type == 'checkbox' && this.elements[x].checked == true){
						this.send += '&';
						this.send += this.elements[x].name;
						this.send += '=';
						this.send += this.elements[x].value;
					}else if(this.elements[x].type != 'radio' && this.elements[x].type != 'checkbox' && this.elements[x].name.length > 0){
						this.send += '&';
						this.send += this.elements[x].name;
						this.send += '=';
						this.send += this.elements[x].value;						
					}					
				}
				
				ajax = openAjax();
				ajax.open(this.method, this.action ,true);
				ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				ajax.onreadystatechange = function (){
/*##### ÁREA EDITÁVEL ######*/
					if(ajax.readyState == 4){
						alert('Formulário enviado com sucesso! Aguarde, em breve entraremos em contato.');
						ge(idForm).reset();
					}
/*##### ÁREA EDITÁVEL ######*/
				};
				
				ajax.send(this.send);
				
				return false;
			}
		}/*end of if then else*/
		
	};/*fim do método filterOnSubmit*/
	
}/*fim do objeto filtering*/
//########################## FIM DO OBJETO filtering() ######################################			
