/**
 * Script com funções do sistema.
 * @charset WIN-ANSI (mudando o charset pode causar erros de acentuação)
 * @author Julio Vedovatto <julio@binworks.com.br>
 * @version 20090107
 */

var EADCON = null;
// Estruturando função em virtude da variável jQuery, desta forma garante compatibilidade apenas com a biblioteca.
// A variável que receberá a função foi criada fora, para se poder utilizar em funções nativas como setTimeout() ou setInterval()
(function(){
	EADCON = {
		/**
		 * Função de inicialização, todas as funções que devem ser chamadas no final do carregamento 
		 * do documento devem ser colocadas dentro desta função.
		 */
		init: function(){			
			this.Menu.init();
			this.Form.init();
			this.Requerimentos.init();
			this.RollDown.init();			
		},
		Menu: {
			init: function(){				
				this.initMenuTopo();
			},
			initMenuTopo: function(){				
				$('div#header div.menu_topo ul.menu > li')
					.hover(
						function(){							
							if ($(this).find('ul').size() > 0)
								$(this).addClass('over').find('ul').show()
						},
						function(){
							if ($(this).find('ul').size() > 0)
								$(this).removeClass('over').find('ul').hide();
						}
					);
			}
		},
		/** Parte de Usuário **/
		Usuario: {			
			mostrarPerfilHeader: function() {
				if ($('div#usuario div.editar').is(':visible')) {
					$('div#usuario div.editar')
						.slideUp(
							'slow', 
							function(){
								$('div#usuario div.editar form#formEditarPerfil')[0].reset();
								$('div#usuario div.perfil').slideDown();
							}
						);
				} else
					$('div#usuario div.perfil').slideToggle();
				return false;
			},
			editarPerfilHeader: function() {
				$('div#usuario form#formEditarPerfil div.sucesso').remove();
				if ($('div#usuario div.perfil').is(':visible'))
					$('div#usuario div.perfil').slideUp('slow', function(){$('div#usuario div.editar').slideDown();});
				else
					$('div#usuario div.editar').slideToggle();
				return false;
			},
			/**
			 * Esconder o formulário e dar Reset nos campos.
			 */
			resetEditarHeader: function() {				
				$('div#usuario div.editar').slideUp('slow', function(){$('div#usuario div.editar form#formEditarPerfil')[0].reset();});
			}
		},
		/** Dados Cadastrais **/
		Dados: {
			init: function() {
			},
			trocaTelaDados: function(element, link) {
				if (!$(link).hasClass('ativo')) {
					with($(element)) {
						parent()
							.find('.dados_box')
								.hide();
						$(link).parent().parent().find('li.ativo').removeClass('ativo');
						$(link).parent().addClass('ativo').blur();
						show();
					}
				}
				return false;
			},
			mostraContratoModal: function(url) {
				url = url + '?width=780&height=520&TB_iframe=true';
				tb_show(
						'<button class="botao botao_mini" title="Imprimir Contrato" onclick="EADCON.Utils.printModal(\'#TB_iframeContent\');">Imprimir Contrato</button> ou ', 
						url, 
						false,
						'TB_contrato'
				);
			},
			editarAluno: function() {
				var prefix = 'dados_cadastrais_';
				// Correção bug skype plugin
				if ($('div#dados_cadastrais div.lista_dados div.dados_box ul.lista li span.skype_tb_injection').size() > 0) {
					$('div#dados_cadastrais div.lista_dados div.dados_box ul.lista li span[id^="softomate_highlight"]')
						.each(function(){
							$(this).replaceWith($(this).attr('context'));
						});
					
				}
				// /Correção bug skype plugin
				$('div#dados_cadastrais div.lista_dados div.dados_box ul.lista li')
					.each(function(){						
						if ($(this).find('span').size() > 0) {
							var name = EADCON.Utils.sanitizeString($(this).parent().prev('h4.titulo').html()) + "_";
							$(this).find('strong').replaceWith('<label for="' + prefix + name + EADCON.Utils.sanitizeString($(this).find('strong').html()) + '">' + $(this).find('strong').html() + '</label>');
							$(this)
								.find('span')
									.replaceWith('<input type="text" class="texto texto_mini none" size="33" name="' + prefix + name + EADCON.Utils.sanitizeString($(this).find('label').html()) + '" id="' + prefix + name +  EADCON.Utils.sanitizeString($(this).find('label').html()) + '" value="' + $(this).find('span').html() + '" />');
						} else {
							$(this).find('label').replaceWith('<strong>' + $(this).find('label').html() + '</strong>');
							$(this).find('input.texto').replaceWith('<span>' + $(this).find('input.texto').val() + '</span>');
						}
					}
				);				
				if ($('div#dados_cadastrais div.lista_dados div.dados_box ul.lista li input.texto').size() > 0) {
					$('div#dados_cadastrais div.lista_dados div.dados_box ul.lista li input.texto').fadeIn('slow');
					$('div#dados_cadastrais div.lista_dados p.submit button')
						.html('Gravar alterações')
						.attr('title',"Salvar alterações");
					$('div#dados_cadastrais div.lista_dados p.submit button').after('<span class="acao"> ou <a class="cancelar" href="javascript:;;" onclick="return EADCON.Dados.editarAluno();">Cancelar</a></span>');
				} else {
					$('div#dados_cadastrais div.lista_dados p.submit button')
						.html('Editar')
						.attr('title',"Iniciar Edição de Aluno");
					$('div#dados_cadastrais div.lista_dados p.submit span.acao').remove();
				}				
				return false;
			}
		},		
		/** /Dados Cadastrais **/
		/** Requerimentos **/
		Requerimentos: {
			init: function() {
				this.calculaValoresSolicitacaoRequerimento();
			},
			calculaValoresSolicitacaoRequerimento: function() {
				$('div#solicitacao_requerimentos input#valor_eadcon').blur(function(){
					var valor_eadcon = parseFloat(this.value.replace(',',"."),10),
						valor_ies = parseFloat($('div#solicitacao_requerimentos input#valor_ies').val().replace(',',".")),
						total = valor_eadcon + valor_ies;
					$('div#solicitacao_requerimentos span#valor_total')
						.html(total > 0 ? "R$ " + total.toFixed(2).toString().replace('.',",") : "Isento");
				});
				$('div#solicitacao_requerimentos input#valor_ies').blur(function(){
					var valor_ies = parseFloat(this.value.replace(',',"."),10),
						valor_eadcon = parseFloat($('div#solicitacao_requerimentos input#valor_eadcon').val().replace(',',".")),
						total = valor_eadcon + valor_ies;
					$('div#solicitacao_requerimentos span#valor_total')
						.html(total > 0 ? "R$ " + total.toFixed(2).toString().replace('.',",") : "Isento");					
				});
			}
		},
		
		/** /Requerimentos **/
		/** /Parte de Usuário **/
		/** Controle de Formulários **/
		Form: {
			init: function() {
				var elements_form = 'form#formBusca input#query, form#formPesquisaAluno input#query, form#formPesquisaDocumento input#query, form#formPesquisaColaborador input#query';
				this.focusFieldsIE();
				this.saveElementValue(elements_form);
				$(elements_form)
					.focus(function(){EADCON.Form.elementClearDefValue(this);})
					.blur(function(){EADCON.Form.elementRestoreDefValue(this)});
			},
			/** 
			 * Correção para IE para o pseudo-atributo :hover do CSS,
			 * adicionando uma classe e retirando-a para simular o mesmo efeito.
			 */
			focusFieldsIE: function(element) {
				if ($.browser.msie) {
					$(element || ':text,textarea,:password,:file')
						.focus(function(){EADCON.Form.elementFocus(this);})
						.blur(function(){EADCON.Form.elementBlur(this);});
				}
			},
			saveElementValue: function(element) {
				$(element).attr('old_val', $(element).val());
			},
			elementClearDefValue: function(element) {				
				if ($(element).attr('old_val') === $(element).val())
					$(element).val('')
			},
			elementRestoreDefValue: function(element) {
				if ($.trim($(element).val()).length === 0)
					$(element).val($(element).attr('old_val'));
			},
			elementFocus: function(element) {
				$(element).addClass('form_element_focus');				
			},
			elementBlur: function(element) {
				$(element).removeClass('form_element_focus');
			},
			/**
			 * Esconder ou relevar campos type="password".
			 * @param string elemento_pai Informar elemento pai que contem o type="password"
			 * @param boolean hide_password Esconder ou relevar a senha
			 */
			esconderSenha: function(elemento_pai, hide_password) {				
				$(elemento_pai).find('input' + (hide_password ? '.password_field' : '[type="password"]'))
					.each(function(){						
						var element = $('<input type="' + (hide_password ? 'password' : 'text') + '" />')
										.attr({
												className: this.className,
												name: this.name,
												id: this.id,
												value: this.value,
												maxLenght: this.maxLenght,
												size: this.size
										})
						if (hide_password)
							$(element).removeClass('password_field');
						else
							$(element).addClass('password_field');
						EADCON.Form.focusFieldsIE(element);
						$(this).replaceWith(element);
					});
				return false;
			},
			esconderSenhaTrocaSenhaHeader: function(hide_password) {				
				return this.esconderSenha('div.troca_senha form fieldset', hide_password);
			},
			esconderSenhaFormLogin: function(hide_password) {
				return this.esconderSenha('form#formLogin fieldset', hide_password);
			},
			mostrarTrocaSenha: function(cancela) {
				if (!$('div#TB_window').is(':visible'))
					tb_show("Trocar Senha", 'trocar_senha.shtml?width=350&height=370&TB_iframe=true', false);
				else
					tb_remove();
				return false;
			},
			mostraEsqueciSenhaLogin: function() {
				$('form#formEsqueciSenha')
					.slideToggle('slow', function(){
											if (!$(this).is(':visible'))
												this.reset();
										 }
					);
				return false;
			},
			enviarNovaSenha: function(form) {
				if ($.trim($(form).find('input#usuario_es').val()).length > 0) {
					$.ajax({
						type: 'post',
						url: form.action,
						data: $(form).serialize(),
						dataType: 'json',
						complete: function() {
							$(form).find('button').attr('disabled', false);
						},
						error: function() {
							$(form).find('span.loading').hide();
							$(form).find('div.errors ol').empty().append('<li>Erro desconhecido ao enviar a solicitacao.</li>');
							$(form).find('div.errors').fadeIn();
						},
						beforeSend: function() {						
							$(form).find('div.errors').hide();
							$(form).find('a.cancelar').after('<br /><span class="loading">Enviando solicitação...</span>');
							$(form).find('button').attr('disabled',"disabled");
						},
						success: function(data) {
							$(form).find('span.loading').hide();							
							if (typeof data === 'object') {								
								if (data.sucesso) {
									$(form).find('p').hide();
									$(form).find('fieldset').append('<div class="sucesso"><ol><li>E-mail enviado com sucesso.</li></ol></div>');
									setTimeout("$('div.tooltip a.link_1').click();", 4000); //4 segundos
								} else {
									$(form).find('div.errors ol').empty().append('<li>Erro desconhecido ao enviar a solicitacao</li>');
									$(form).find('div.errors').fadeIn();
								}
							}
						}
					});
				} else {
					$(form).find('div.errors ol').empty().append('<li>É necessário informar um usuário válido.</li>');
					$(form).find('div.errors').fadeIn();
				}
				return false;
			},
			validarLogin: function(form) {
				$(form).find('div.errors').hide();
				if (($.trim($(form).find('input#usuario').val()).length > 0) && ($.trim($(form).find('input#senha').val()).length > 0)) {
					return true;
				} else {
					$(form).find('div.errors ol').empty().append('<li>É necessário informar um usuário e sua senha.</li>');
					$(form).find('div.errors').fadeIn();
				}
				return false;
			},
			validarEsqueciSenha: function(form) {				
				var valida = true,
					err_str = "Erro desconhecido ao enviar a solicitação.";
				$(form).find('div.errors').hide();
				$(form).find('input.texto')
					.each(function(){
						if ($.trim($(this).val()).length === 0) {
							err_str = "Todos os campos são de preenchimento obrigatório.";
							valida = false;
							return false;
						}
					});
				// Verificar se a senha nova é identica a sua confirmação
				if ((valida) && ($(form).find('input#senha_nova').val() !== $(form).find('input#repita_senha').val())) {
					err_str = "As senhas digitadas não conferem.";
					valida = false;
				}				
				if (valida) {
					$(form).find('a.cancelar').after('<br /><span id="loading">Enviando solicitação...</span>');
				} else {
					$(form).find('div.errors ol').empty().append('<li>' + err_str + '</li>');
					$(form).find('div.errors').fadeIn('slow')
					return false;					
				}
			},
			validarEdicaoPerfil: function(form) {
				var valida = true,
					err_str = "Erro desconhecido ao enviar a solicitação.";
				$('form#formEditarPerfil div.errors').hide();
				$('div#usuario div.editar div.sucesso').remove();
				$(form).find('input.texto')
					.each(function(){
						if ($.trim($(this).val()).length === 0) {
							err_str = "Todos os campos são de preenchimento obrigatório.";
							valida = false;
							return false;
						}
					});
				if (valida) {
					$(form).find('a.cancelar').after('<br /><span id="loading">Enviando solicitação...</span>');
					setTimeout('EADCON.Form.editaPerfilSucesso()', 3000);
				} else {
					$(form).find('div.errors ol').empty().append('<li>' + err_str + '</li>');
					$(form).find('div.errors').fadeIn('slow');
				}				
				return false;
			},
			editaPerfilSucesso: function() {
				$('form#formEditarPerfil span#loading').remove();
				$('form#formEditarPerfil div.errors')
						.before( '<div class="sucesso none" style="width: 544px;"><ol><li>Dados alterados com sucesso.</li></ol></div>')
						.prev('div.sucesso')
							.fadeIn('slow');
				setTimeout("EADCON.Usuario.editarPerfilHeader();", 5000);
			},
			enviarContato: function() {
				$('div#container form').hide();
				$('div#container')
					.append( '<div class="sucesso none"><ol><li>Seu email foi enviado com sucesso. <a class="cancelar" href="javascript:;;" onclick="return window.parent.EADCON.Form.mostrarTrocaSenha();">Fechar esta tela</a></li></ol></div>')
					.find('div.sucesso')
						.fadeIn('slow');
			},	
			enviarFrase: function(Frase) {
				$('div#container form').hide();
				$('div#container')
					.append( '<div class="sucesso none"><ol><li>'+ Frase +' <a class="cancelar" href="javascript:;;" onclick="return window.parent.EADCON.Form.mostrarTrocaSenha();">Fechar esta tela</a></li></ol></div>')
					.find('div.sucesso')
						.fadeIn('slow');
			},	
			enviarIndicacao: function() {
				$('div#container form').hide();
				$('div#container')
					.append( '<div class="sucesso none"><ol><li>Sua Indicação foi enviado com sucesso. <a class="cancelar" href="javascript:;;" onclick="return window.parent.EADCON.Form.mostrarTrocaSenha();">Fechar esta tela</a></li></ol></div>')
					.find('div.sucesso')
						.fadeIn('slow');
			},
			enviarIndicacaojacadastro: function() {
				$('div#container form').hide();
				$('div#container')
					.append( '<div class="sucesso none"><ol><li>Já existe indicação cadastrada . Continue Participando!<a class="cancelar" href="javascript:;;" onclick="return window.parent.EADCON.Form.mostrarTrocaSenha();">Fechar esta tela</a></li></ol></div>')
					.find('div.sucesso')
						.fadeIn('slow');
			},
			enviarInscricao: function() {
				$('div#container form').hide();
				$('div#container .codigo_assinante').hide();
				$('div#container')
					.append( '<div class="sucesso none"><ol><li>Sua Inscrição foi enviada com sucesso para a NET. <a class="cancelar" href="javascript:;;" onclick="return window.parent.EADCON.Form.mostrarTrocaSenha();">Fechar esta tela</a></li></ol></div>')
					.find('div.sucesso')
						.fadeIn('slow');
			},
			enviarNaoClienteInscricao: function() {
				$('div#container form').hide();
				$('div#container .codigo_assinante').hide();
				$('div#container')
					.append( '<div class="sucesso none"><ol><li>Seus dados foram enviados para a NET com sucesso!.<br> Por favor aguarde que a NET entrará em contato.<br><a class="cancelar" href="javascript:;;" onclick="return window.parent.EADCON.Form.mostrarTrocaSenha();">Fechar esta tela</a></li></ol></div>')
					.find('div.sucesso')
						.fadeIn('slow');
			},
			enviarJaInscricao: function() {
				$('div#container form').hide();
				$('div#container .codigo_assinante').hide();
				$('div#container')
					.append( '<div class="sucesso none"><ol><li>Você já está cadastrado como participante!<br>Para acessar sua conta e indicar seus amigos, basta fazer seu login!<a class="cancelar" href="javascript:;;" onclick="return window.parent.EADCON.Form.mostrarTrocaSenha();">Fechar esta tela</a></li></ol></div>')
					.find('div.sucesso')
						.fadeIn('slow');
			},										
			trocaSenhaSucesso: function() {				
				$('div#container_troca_senha form').hide();
				$('div#container_troca_senha')
					.append( '<div class="sucesso none"><ol><li>Sua senha foi alterada com sucesso. <a class="cancelar" href="javascript:;;" onclick="return window.parent.EADCON.Form.mostrarTrocaSenha();">Fechar esta tela</a></li></ol></div>')
					.find('div.sucesso')
						.fadeIn('slow');
			}
		},
		/** /Controle de Formulários **/
		/** Tooltips **/
		ToolTip: {
			init: function(){},
			show: function(element) {
				with ($(element + ' div.hint')) {
					if (is(':visible'))
						fadeOut('slow');
					else
						fadeIn('slow');
				}
				return false;
			},
			hide: function(element) {
				$(element + ' div.hint').fadeOut('slow');
				return false;
			}
		},
		/** /Tooltips **/
		RollDown: {
			init: function() {
				var element_rolldown = 'div#container div.content h2.titulo:first';
				this.correcaoIE6();
				$('div#rolldown h2.titulo')
					.html($(element_rolldown).html());
				this.activateScroll(element_rolldown);
			},
			activateScroll: function(element) {
				if ($(element).size() > 0) {
					$(window)
						.scroll(function(){
									if ($(this).scrollTop() > $(element).offset().top)
										$('div#rolldown').show();
									else
										$('div#rolldown').hide();					
								}
						);
				}					
			},
			/**
			 * Função de correção para IE6, tornando o rolldown absoluto e calculando via expressão javascript a posicao, colocando na propriedade top do css
			 * @author Julio Vedovatto <julio@binworks.com.br>
			 */
			correcaoIE6: function() {				
				// Poderia ser usado $.browser.version na segunda parte do condicional, mas estava retornando sempre 6.0, mesmo sendo IE7
				// Devido a isto utilizar uma expressao regular
				if (($.browser.msie) && (navigator.appVersion.match(/^[^(]*\(compatible; MSIE 6.0;/)))
					$('div#rolldown').addClass('rolldown_ie6');
				else
					$('div#rolldown').addClass('rolldown_normal');
			}
		},
		Boleto: {
			init: function(){},
			open: function(url) {
				url = url + '?width=780&height=520&TB_iframe=true';
				tb_show(
						'<button class="botao botao_mini" title="Imprimir Boleto Bancario" onclick="EADCON.Utils.printModal(\'#TB_iframeContent\');">Imprimir Boleto</button> ou ', 
						url, 
						false,
						'TB_boleto'
					   );
			}
		},		
		/** 
		 * Função para mudar página, via GET 
		 * @param string location
		 */
		setLocation: function(location) {
			window.location = location;
			return false;
		},
		
		
		/** funcoes de utilidade **/
		Utils: {
			printModal: function(window_name) {
				$(window_name)[0].contentWindow.focus();
				$(window_name)[0].contentWindow.print();				
			},
			/**
			 * Função de limpeza de uma string, removendo acentuação dos itens e concatenando com underline (_) os espaços.
			 * @author Julio Vedovatto <julio@binworks.com.br>
			 * @param string str			 
			 * @return string			 
			 */
			sanitizeString: function(str) {
				str = str || "";
				str = str.toLowerCase();
				var patterns = [
	                            [/[\xC0-\xC5\xE0-\xE5]/g,'a'],
	                            [/[\xC8-\xCB\xE8-\xEB]/g,'e'],
	                            [/[\xCC-\xCF\xEC-\xEF]/g,'i'],
	                            [/[\xD2-\xD6\xF2-\xF6]/g,'o'],
	                            [/[\xD9-\xDC\xF9-\xFC]/g,'u'],
	                            [/[\xC7\xE7]/g,'c'],
	                            [/[\s-]/g,'_'],
	                            [/[^a-zA-Z0-9\s_]/g,'']
							 ];
				for (var i = 0; i < patterns.length; i++) {
					str = str.replace(patterns[i][0],patterns[i][1]);
				}
				return str;

			}
		}
		/** /funcoes de utilidade **/
	};
	$(document).ready(function(){EADCON.init();});
})(jQuery);
