	String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); }
	
	// objetos globais
	var acecReturnItem = new ClassAcecReturnItem();
	var acecBeautify = new ClassAcecBeautify();
	
	$(document).ready(function() {
		loadOnReady();
		loadOnReadyAndAjax();
		try {
			A4J.AJAX.AddListener( { onafterajax: loadOnReadyAndAjax } );
			A4J.AJAX.AddListener( { onafterajax: loadOnAjax } );			
		} catch (e) {
		}
	});

	/**
	  * Executa operacoes a serem realizadas apenas no load das paginas.
	  */
	 function loadOnReady(event) {
	 }
	
	/**
	  * Executa operacoes a serem realizadas no load das paginas e apos ajax.
	  */
	 function loadOnReadyAndAjax(event) {
		tabs(); 
		acecBeautify.check(event);
	 }
	 
	 /**
	  * Executa operacoes a serem realizadas apos qualquer ajax executado (apenas)
	  */
	 function loadOnAjax(event) {
		 if (typeof(callFunctions) == "function") {
			 callFunctions();
		 }
	 }
	/**
	 * Gera tabindex dinacamente e desabilita tab em links.
	 */
	function tabs() {
		var tabindex = 1;
		$('a').each(function() {
			var $input = $(this);
			$input.attr("tabindex", "-1");
		});
		
		$('input,select,a.botao,a.btn').each(function() {
			if (this.type != "hidden") {
				var $input = $(this);
				$input.attr("tabindex", tabindex);
				tabindex++;
	
				var next = '*[tabindex=' + tabindex + ']';
				$(this).bind("keyup", function(e) {
					if (this.value != null) {
						if (this.value.length == this.maxLength) {
							$(next).focus();
						}
					}
				});
			}
		});
	}	

	function formatDate(field) {
		field.value = filterField(field);
		vr = field.value;
		size = vr.length;

		if ( size > 2 && size < 5 ) {
			field.value = vr.substr( 0, size - 2  ) + '/' + vr.substr( size - 2, size );
		}
		if ( size >= 5 && size <= 10 ) {
			field.value = vr.substr( 0, 2 ) + '/' + vr.substr( 2, 2 ) + '/' + vr.substr( 4, 4 ); 
		}
	}
	
	function formatDateMonthYearOnly(field) {
		field.value = filterField(field);
		vr = field.value;
		size = vr.length;

		if ( size > 2 && size < 5 ) {
			field.value = vr.substr( 0, size - 2  ) + '/' + vr.substr( size - 2, size );
		}
		if ( size >= 5 && size <= 7 ) {
			field.value = vr.substr( 0, 2 ) + '/' + vr.substr( 2, 4 ); 
		}
	}	

	function filterField(field) {
		var s = "";
		var cp = "";
		vr = field.value;
		for (i = 0; i < vr.length ; i++) {  
			if (vr.substring(i,i + 1) != "/" 
				&& vr.substring(i,i + 1) != "-" 
				&& vr.substring(i,i + 1) != "."  
				&& vr.substring(i,i + 1) != "," ) {
			 	s = s + vr.substring(i,i + 1);
			}
		}
		field.value = s;
		return cp = field.value;
	}

	function number(event) {
		var key = getKey(event);
		if (isPrintable(key)) {
			return /\d/.test(String.fromCharCode(key));
		}
		return true;
	}	

	function isPrintable(key) {
	   return (key >= 32 && key < 127 || key >= 161);
	}
	
	function getKey(e) {
	   return window.event ? window.event.keyCode
	        : e            ? e.which
	        :                0;
	}
	
	function disableField(id) {
		var input = document.getElementById(id);
		input.disabled = !input.disabled;
	}
	
    function formatPhone(field){
    	v=field.value;
    	v=v.replace(/\D/g,""); 
        v=v.replace(/(\d)(\d{4}$)/,"$1-$2");
        field.value=v;
        return true;
    }

    function formatDocument(field){
    	v=field.value;
    	v=v.replace(/\D/g,""); 
        field.value=v;
        return true;
    }    
    
    // chama o thickbox manualmente, fechando modal anterior
    function acecChangeModal(modalName, params) {
    	if (typeof(params) == "undefined") {
    		params = "";
    	}
    	tb_remove();
    	acecShowModal(modalName, params);
    };
    
    // chama o thickbox manualmente
    function acecShowModal(modalName, params) {
    	if (typeof(params) == "undefined") {
    		params = "";
    	}
    	switch (modalName) {
			case "mail_reminder_begin":
				params += "&operationType=mail_reminder";
				tb_show("Esqueceu seu e-mail cadastrado?", "popup/document_number.xhtml?" + params + "&TB_iframe=true&height=110&width=628");
			break;
			case "mail_reminder_end":
				tb_show("Esqueceu seu e-mail cadastrado?", "popup/mail_reminder.xhtml?" + params + "&TB_iframe=true&height=150&width=628");
			break;
			case "mail_change_begin":
				params += "&operationType=mail_change";
				tb_show("Seu email mudou?", "popup/document_number.xhtml?" + params + "&TB_iframe=true&height=110&width=628");
			break;
			case "mail_change_end":
				tb_show("Seu email mudou?", "popup/mail_change.xhtml?" + params + "&TB_iframe=true&height=270&width=628");
			break;
			case "password_reminder":
				tb_show("Esqueceu sua senha?", "popup/password_reminder.xhtml?" + params + "&TB_iframe=true&height=130&width=628");
			break;
			case "restitution_data":
				tb_show("Dados para restituição", "../popup/restitution_data.xhtml?" + params + "&TB_iframe=false&height=320&width=628");
			break;
			case "address_change_sserv":
				tb_show("Alterar Endereço", "../popup/address_change.xhtml?" + params + "&TB_iframe=true&height=400&width=628");
			break;
			case "address_change_ckout":
				tb_show("Alterar Endereço", "popup/address_change.xhtml?" + params + "&TB_iframe=true&height=400&width=628");
			break;
			case "delivery_schedule":
				tb_show("Agendar entrega", "popup/delivery_schedule.xhtml?" + params + "&TB_iframe=true&height=400&width=628");
			break;
    	}
    };
    
    // ajusta altura do modal
    function acecUpdateModalHeight(modalName) {
    	var altura = 200;

    	switch (modalName) {
    		case "document_number_error": altura = 160; break;
    		
    		case "mail_reminder_error": altura = 180; break;
    		case "mail_reminder_result": altura = 130; break;
    		
    		case "password_reminder_error": altura = 180; break;
    		case "password_reminder_result": altura = 130; break;
    		
    		case "mail_change_error": altura = 315; break;
    		case "mail_change_result": altura = 150; break;
    		
    		default: altura = modalName; break;
    	}
    	
    	$("#TB_iframeContent")[0].style.height = altura + "px";
    }

	/**
	 * class specific for return item pages
	 */
	function ClassAcecReturnItem() {
			
		this.executeModalCheck = true;
			
		/* checks if must show modal and do it */
		this.checksShowModal = function () {
			var show = $("input[name=usuarioOption2]:checked").val() == "3" ? true : false;
			if (show && this.executeModalCheck) {
				acecShowModal("restitution_data");
				return false;
			} else {
				return true;
			}
		};
		
		/* process modal submit (pseudo-submit) */ 
		this.modalSubmit = function () {
			this.copyFormValues();
			window.parent.acecReturnItem.executeModalCheck = false;
			window.parent.$("[id$=:linkSubmit]").trigger("click");
		};
		
		/* copy form values from modal to page */ 
		this.copyFormValues = function () {
			this.copyFormValue("selecaoOrderForm\\:bank", false);
			this.copyFormValue("selecaoOrderForm\\:accountType", false);
			this.copyFormValue("selecaoOrderForm\\:agency", false);
			this.copyFormValue("selecaoOrderForm\\:account", false);
			this.copyFormValue("selecaoOrderForm\\:accountLess", true);
		};
	
		/* copy ONE form values from modal to page */ 
		this.copyFormValue = function (id, isCheckbox) {
			var strChecked = isCheckbox ? ":checked" : "";
			var from = $("#" + id + strChecked);
			var to = window.parent.jQuery("#" + id + "_autoFilled"); // take all hiddens that have [id]_autoFilled in the end of "id"
			var valor = (from.val() && from.val() != "null") ? from.val() : ""; 
			to.val(valor);
		};
		
	};


	/**
	 * class to handle css error class
	 */	
	function ClassAcecBeautify() {
		
		this.class1 = "fundoInputErro";
		this.class2 = "fundoInputBordaErro";
		this.lastFormChecked = null;

		/* checks if need to apply/remove some css classes */
		this.check = function(event) {
			
			if (event) {
				var idForm = event.form.id;
				if (idForm != this.lastFormChecked && this.lastFormChecked) {
					// remove class form last form checked
					var selector = "#" + this.lastFormChecked + " *";
					$(selector).removeClass(this.class1).removeClass(this.class2);
				}
				this.lastFormChecked = idForm;
			}
			
			if (idForm) {
				idForm = "#" + idForm + " ";
			} else {
				idForm = "";
			}
			
			// beautify
			$(idForm + ".jQueryBeautify").parent().addClass(this.class1);
			$(idForm + ".jQueryBeautify ~ span").addClass(this.class2);
			
			// unbeautify
			$(idForm + ".jQueryUnbeautify").parent().removeClass(this.class1);
			$(idForm + ".jQueryUnbeautify ~ span").removeClass(this.class2);
			
		};
	};
   
    
    function formatMissingFields() {
		var indexSpan = $("span").index($("span.fundoInputBordaErro")[0]);
		var indexInput = $("span").index($("span.fundoInputErro")[0]);
		$("span:gt("+indexSpan+")").removeClass("fundoInputBordaErro");
		$("span:gt("+indexInput+")").removeClass("fundoInputErro");
    }
    
	function textAreaMaxLength(obj, limit) {
		if (obj.value.length >= limit) {
			obj.value = obj.value.substring(0, limit-1);
		}
	}

    
    function focusOnComplete(field, kcode, clkd) {
//        var i = parseInt(clkd.getAttribute("tabindex"));
//        
//        if (kcode == '9')
//         i++;
//        
//        $('input[tabindex=' + i + ']').focus();;
    }
    
	function zeroesCpfCnpj(field){ 
    	zeroes = "00000000000000"; 
    	len=field.value.length; 
    	val=field.value; 
 
    	if (len>1 && len<11) 
    		val = zeroes.substring(0, 11 - len) + val; 
    	else if((len>11 && len<14)) 
    		val = zeroes.substring(0, 14 - len) + val; 
 
        field.value=val; 
        return true; 
    } 
	 
    function doLoading(obj) { 
    	document.getElementById(obj).innerHTML = "<span class='botaoBlue left15 desce6 white'><span class='bordaDirBlue'></span>Aguarde</span>"; 
    }
    
    function doLoadingPayment(form, obj) {
    	document.getElementById(form + ':' + obj).style.display="none";
    	document.getElementById(obj + 'Gray').style.display="";
    }    
    
    // da refresh na tela se houver caminho especificado
    function acecRedirect(url) {
    	if (url) {
	    	if (url.length > 0) {
	    		window.location.href = url;
	    	}
    	}
    }
    
    function checkSubmitLink(event, linkId) {
    	if (event.keyCode == 13) {
    		$('a[id$=' + linkId + ']').click();
    	}
	}
    
